2013-08-29 14 views
14

Czy wpadliście na to pytanie?Kontroler nawigacyjny jest renderowany na widoku, który przeszedłem do

Zasadniczo w systemie iOS 7 Nawigacja Sterownik jest renderowany nad podrzędnym widokiem, do którego nawigowałem.

W widoku iOS 6 nawigacja jest umieszczona pomiędzy paskiem nawigacyjnym a stopką. W systemie iOS 7 wygląda na to, że sub-widok jest renderowany na pełnym ekranie, pod paskiem nawigacji i stopką. W rezultacie użytkownik tego nie widzi.

Oto jak poruszać się podrzędny

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

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

Oto jak ja go zainicjować w 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:)]; 

Na co warto Należy również wspomnieć, że subview jest zdefiniowana w XIB korzystania Autolayout. Oto źródło mojego XIB: http://pastebin.com/6RR0zYu4

I wreszcie o to, jak to wygląda w iOS 6

enter image description here

A w iOS 7

enter image description here

Wszelkie myśli?

Odpowiedz

37

Cóż, wymyśliłem to.

W swoim sub-view (BRSMyListSubViewController w moim przypadku), w viewDidLoad, trzeba ustawić jeden z tych dwóch

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

LUB

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

Co ciekawe w widoku głównego kontrolera te wartości są domyślnie ustawione na UIRectEdgeAll, NO i YES, ale ich tableView NIE jest pod navbar i stopką.

Nie wiem, dlaczego to takie nielogiczne.

Dziwne jest również to, że edgesForExtendedLayout musi być mieszany z jedną z dwóch innych właściwości, mimo że wyraźnie odpowiada za zachowanie.

PS. Dla tych, którzy chcą go uruchomić na iOS 6. Sururound kod z if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7)

+0

Dziękuję za odpowiedź, bardzo mi pomogło. – titicaca

+0

Dziękuję za odpowiedź, oszczędzaj mój dzień! –

+0

Działa tylko dla iOS7, jeśli uruchomisz aplikację w urządzeniu z systemem iOS6, da wyjątek, podobnie jak właściwości iOS7 SDK. –

4

Jeśli nie masz nic przeciwko nieprzezroczystemu pasek nawigacji, najprostszym rozwiązaniem może być to zrobić w kontroler widoku, który tworzy kontroler nawigacji :

self.navigationController.navigationBar.translucent = NO; 

Pozycjonowanie ramy będzie miało wówczas takie samo zachowanie jak iOS6, magicznie!

Powiązane problemy