iphone - library - ios programming




Die Navigationsleiste erscheint über den Ansichten mit dem neuen iOS7 SDK (6)

self.edgesForExtendedLayout = UIRectEdgeNone;

Und Sie müssen dies auf AppDelegate # -Anwendung tun: didFinishLaunchingWithOptions:

self.window.backgroundColor = [UIColor whiteColor];

Andernfalls wird die Hintergrundfarbe der Navigationsleiste grau dargestellt. Weil die transparente Navigationsleiste das Fenster überlappt.

CGRect cgRect1 = [[UIScreen mainScreen] applicationFrame];


UISearchBar  *mySearchBar = [[UISearchBar alloc] 
               initWithFrame:CGRectMake(0, 0, cgRect.size.width, 40)];

mySearchBar.autoresizingMask = 
              UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight ;


UITableView  *myTableView = [[UITableView alloc] 
     initWithFrame:CGRectMake(0, 40, cgRect.size.width, cgRect.size.height-40)];

myTableView.autoresizingMask = 
               UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;


[self.view addSubview:mySearchBar];
[self.view addSubview:myTableView];

In den früheren Versionen funktioniert es korrekt. Die Suchleiste erscheint unter der statusbar und der Navigationsleiste. Die tableview erscheint unterhalb der Suchleiste

Aber wenn ich dies auf Xcode 5 sdk iOS 7 , ist die Suchleiste nicht sichtbar (ich denke, es ist unter der Statusleiste und Navigationsleiste platziert), und auch die Navigationsleiste erscheint über der Tabellenansicht.

Wird es mit iOS 7 Stable Release behoben werden?

Oder ist es das Problem meiner Programmierung?

Oder sollten wir damit umgehen, indem wir den Wert y (y = statubar height + nav bar height) für iOS 7 hinzufügen?

Ich habe kürzlich Xcode 5 DP heruntergeladen, um meine Apps in iOS 7 zu testen. Das erste, was ich bemerkt und bestätigt habe, ist, dass die Grenzen meiner Ansicht nicht immer angepasst werden, um die Statusleiste und die Navigationsleiste zu berücksichtigen.

In viewDidLayoutSubviews drucke ich die Grenzen der Ansicht:

{{0, 0}, {320, 568}}

Dies führt dazu, dass mein Inhalt unter der Navigationsleiste und der Statusleiste angezeigt wird.

Ich weiß, dass ich die Höhe selbst berechnen kann, indem ich die Höhe des Hauptbildschirms erhalte, die Höhe der Statusleiste und die Höhe der Navigationsleiste subtrahiere, aber das scheint unnötige Zusatzarbeit zu sein.

Hat jemand anderes dieses Problem erfahren?

AKTUALISIEREN:

Ich habe eine Lösung für dieses spezielle Problem gefunden. Legen Sie die transluzente Eigenschaft der Navigationsleiste auf NO fest:

self.navigationController.navigationBar.translucent = NO;

Dadurch wird verhindert, dass die Ansicht unter der Navigationsleiste und der Statusleiste eingerahmt wird.

Ich habe jedoch keine Lösung gefunden, wenn die Navigationsleiste transparent sein soll. Zum Beispiel, wenn ich ein Foto im Vollbildmodus betrachte, möchte ich, dass die Navigationsleiste durchscheinend ist und die Ansicht darunter eingerahmt wird. Das funktioniert, aber wenn ich die Navigationsleiste ein- und ausgeblendet habe, habe ich noch merkwürdigere Ergebnisse erlebt. Die erste Unteransicht (ein UIScrollView ) wird jedes Mal in seiner ursprünglichen UIScrollView geändert.


@ One Man Crew's Antwort ist korrekt, aber:

Ich würde empfehlen, diesen Code zu verwenden, um Fehler zu vermeiden, wenn die App auf älteren Versionen ausgeführt wird:

 #if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_6_1
     if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
        self.edgesForExtendedLayout = UIRectEdgeNone;
 #endif

Eine Lösung ist der Einsatz des Navigation Controllers. Dies löst das Problem automatisch. Verwenden Sie auch Xcode 5 anstelle von Xcode Preview-Versionen, da es sich um Beta-Versionen handelt.


Wenn Sie die Transparenz beibehalten möchten, wenn der Benutzer die Tabellenansicht scrollt, können Sie das contentInset festlegen:

CGFloat topLayoutGuide = self.topLayoutGuide.length + self.tabBarController.navigationController.navigationBar.frame.size.height;
self.tableView.contentInset = UIEdgeInsetsMake(topLayoutGuide, 0, 0, 0);

diese Antworten waren alle hilfreich, besonders MQoders, aber für mich musste ich auch die Standardoberleiste auf "undurchsichtige schwarze Navigation" setzen.


self.edgesForExtendedLayout=UIRectEdgeNone;

Es funktioniert auf iOS 7 Simulator (Xcode 5 DP5)





ios7