2013-08-29 233 views
14

你们有没有偶然发现这个问题?导航控制器呈现在视图上我导航到

基本上在iOS 7中导航控制器在我导航到的子视图上呈现。

在iOS 6视图中,导航栏位于导航栏和页脚之间。在iOS 7中,它看起来像是在导航栏和页脚下全屏显示子视图。因为结果用户没有看到它。

这是我如何定位到子视图

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

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

这是我如何初始化它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:)]; 

对于什么是值得我还要提到的是子视图是使用XIB定义自动布局。这里是我的XIB来源:http://pastebin.com/6RR0zYu4

最后在这里是如何看起来在iOS 6中

enter image description here

而在iOS的7

enter image description here

有什么想法?

回答

37

嗯,我想通了。

在您的子视图(BRSMyListSubViewController在我的情况),在viewDidLoad,你需要设置这两个

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

OR

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

一个非常有趣的是在根视图控制器,这些价值分别设置为默认UIRectEdgeAllNOYES,但其tableView不在导航栏和页脚下。

我不知道为什么它是如此不合逻辑。

奇怪的是,edgesForExtendedLayout必须与其他两个属性中的一个混合在一起,即使它明确地对行为负责。

PS。对于那些谁想要在iOS 6 Surruound运行它与if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7)

+0

谢谢你提供的答案,它真的帮了我。 – titicaca

+0

非常感谢您的回答保存我的一天! –

+0

它只适用于iOS7,如果你在iOS6运行设备运行应用程序,它会给出异常,因为iOS7 SDK属性 –

4

代码如果你不介意具有不透明的导航栏,那么最简单的解决办法是为此在创建您的导航控制器的视图控制器:

self.navigationController.navigationBar.translucent = NO; 

框架,然后将采取相同的行为iOS6的,神奇的定位!

相关问题