导航控制器在我导航到的视图上呈现

时间:2013-08-29 04:09:05

标签: ios cocoa-touch ios6 uinavigationcontroller ios7

你们有没有绊倒这个问题?

基本上在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:)];

对于它的价值,我还应该提到使用Autolayout在XIB中定义子视图。以下是我的XIB的来源:http://pastebin.com/6RR0zYu4

最后这是它在iOS 6中的外观

enter image description here

在iOS 7中

enter image description here

有什么想法吗?

2 个答案:

答案 0 :(得分:37)

好吧,我明白了。

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

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

OR

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

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

我不知道为什么会这么不合逻辑。

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

PS。对于那些想在iOS 6上运行它的人来说。用if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7)

来代码

答案 1 :(得分:4)

如果您不介意使用不透明的导航栏,那么最简单的解决方案就是在创建导航控制器的视图控制器中执行此操作:

self.navigationController.navigationBar.translucent = NO;

框架的定位将采用与iOS6相同的行为,神奇地!