2013-09-25 10 views
13

Ich entwickle eine UISplitView App setzen, wenn ich iOS6 verlassen hatte ich Design:, wie durch die Verwendung von Xcode 4.6 iOS 7.6 Deltas programmatisch

enter image description here

Jetzt habe ich neuen Xcode5 migrieren und jetzt habe ich diese Design:

enter image description here

UINavigationBar überlappt completelly meine UISearchBar ...

Leo Natan erzählte mir von der Verwendung eines iOS 6/7 Deltas, aber da ich meine UISplitViewControllers programmgesteuert erstelle und hinzufüge,

funktioniert das möglicherweise nicht Ich muss das iOS 6/7 programmgesteuert festlegen, aber ich nicht wissen, wie, jede Hilfe, die ich schätzen werde

+2

Wenn Sie dies in Code tun wollen, müssen Sie arbeiten mit Rahmen. 'if (iOS7) {view.frame = ...} else {view.frame = ...}' –

+0

@PetroKorienev Oder ändere einfach Constraint-Konstanten? Es ist einfacher als Frames zu aktualisieren. – Sulthan

+0

Das OP verwendet kein automatisches Layout und initialisiert seine Controller in Code. Das Hinzufügen von Einschränkungen im Code ist nicht einfacher als das Aktualisieren von Frames. –

Antwort

18

In iOS 7 gibt es jetzt erweiterte Kanten, und deshalb Navigationsleiste überlagert die Suchleiste. Sie können self.edgesForExtendedLayout = UIRectEdgeNone; dies ist UIVewControlelr Eigenschaft festlegen. Sie können auch überprüfen, abhängig von der Version von iOS und Sie können Dinge abhängig von der aktuellen Version von iOS im Gerät tun.

NSString *version = [[UIDevice currentDevice] systemVersion]; 
int ver = [version intValue]; 
if (ver < 7){ 
//iOS 6 work 
} 
else{ 
//iOS 7 related work 
} 
5

Sie können aber auch NSFoundationVersionNumber

if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) { 
    // > iOS7 
} else { 
    // <= iOS6 
} 
+0

Dieser Weg wird von Apple in iOS 7 Transition Guide vorgeschlagen. – coverback

3

verwenden Sie können ein Makro erstellen für dieses Problem zu lösen. ist es nützlich für mich.

#define iOS7Delta (([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) ? 20 : 0) 
-2

Wenn die Ansicht in einem UINavigationController eingebettet ist - einfach „Durchlässiger“ für Ihre Wurzel Navigationsleiste deaktivieren.

Im Storyboard, wählen Sie Navigation Controller-Szene, nächstes wählen Navigationsleiste und in Attribute Inspector (Utilities - Registerkarte 4) untick "Durchlässiger"