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 中使用 Autolayout 定义的。这是我的 XIB 的来源:http: //pastebin.com/6RR0zYu4

最后是它在 iOS 6 中的样子

在此处输入图像描述

在 iOS 7 中

在此处输入图像描述

有什么想法吗 ?

4

2 回答 2

37

嗯,我想通了。

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

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

或者

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

有趣的是,在根视图控制器中,这些值分别设置为 default UIRectEdgeAll,但它不在导航栏和页脚下NOYEStableView

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

必须与其他两个属性之一混合也很奇怪,edgesForExtendedLayout即使它显然对行为负责。

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

于 2013-08-29T05:29:07.620 回答
4

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

self.navigationController.navigationBar.translucent = NO;

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

于 2013-10-10T10:34:35.517 回答