2013-08-29 3 views
14

Haben Sie über dieses Problem gestolpert?Der Navigations-Controller wird über die Ansicht gerendert, in der ich navigiert bin

Grundsätzlich in iOS 7 Navigation Controller wird über die Unteransicht gerendert gerendert.

In der iOS 6 Ansicht navigiere ich zwischen Navigationsleiste und Fußzeile. In iOS 7 sieht es so aus, als ob Unteransicht unter Navigationsleiste und Fußzeile im Vollbildmodus dargestellt wird. Als Ergebnis sieht der Benutzer es nicht.

Hier ist, wie ich navigieren SubView

BRSMyListSubViewController *tagsInfoVC = [[BRSMyListSubViewController alloc] initWithCheckinsList:self.checkinsList 
                       selectedTag:[self tagByIndexPath:indexPath]]; 

[self.navigationController pushViewController:tagsInfoVC animated:YES]; 

Hier ist, wie ich es initialisieren in viewDidLoad

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Settings" style:UIBarButtonItemStyleBordered target:self action:@selector(settings:)]; 

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Logout" style:UIBarButtonItemStyleBordered target:self action:@selector(logout:)]; 

Für das, was es wert ist, ich auch, dass subview erwähnen sollte in XIB definiert wird Automatisches Layout Hier ist Quelle meiner XIB: http://pastebin.com/6RR0zYu4

Und schließlich ist hier, wie es aussieht, ist in iOS 6

enter image description here

Und in iOS 7

enter image description here

Irgendwelche Gedanken?

Antwort

37

Nun, ich habe es herausgefunden.

In Ihrer Unteransicht (BRSMyListSubViewController in meinem Fall), in viewDidLoad, müssen Sie eine dieser beiden diesen Wert

self.edgesForExtendedLayout = UIRectEdgeNone; 
self.automaticallyAdjustsScrollViewInsets = NO; 

ODER

self.edgesForExtendedLayout = UIRectEdgeNone; 
self.extendedLayoutIncludesOpaqueBars = YES; 

Interessanterweise in Root-View-Controller einstellen sind standardmäßig auf UIRectEdgeAll, NO und YES gesetzt, aber seine tableView ist nicht unter Navbar und Fußzeile.

Ich weiß nicht, warum es so unlogisch ist.

Es ist auch seltsam, dass edgesForExtendedLayout mit einer von zwei anderen Eigenschaften gemischt werden muss, obwohl es eindeutig für das Verhalten verantwortlich ist.

PS. Für diejenigen, die es auf iOS 6 ausführen möchten. Surruound den Code mit if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7)

+0

Vielen Dank für die Antwort, es hat mir wirklich geholfen. – titicaca

+0

Vielen Dank für Ihre Antwort sparen Sie meinen Tag! –

+0

Es funktioniert nur für iOS7, wenn Sie die Anwendung in iOS6 laufendes Gerät ausführen gibt es eine Ausnahme wie iOS7 SDK Eigenschaften –

4

Wenn es Ihnen nichts ausmacht, eine undurchsichtige Navigationsleiste zu haben, dann könnte die einfachste Lösung dies im View-Controller, der Ihren Navigationscontroller erstellt :

self.navigationController.navigationBar.translucent = NO; 

Die Positionierung des Rahmens wird dann das gleiche Verhalten wie iOS6, magisch!

Verwandte Themen