我在具有 NavigationBar 的 iOS6 和 iOS7 中运行相同的应用程序。它在 iOS6 上运行良好,但在 iOS7 中,所有视图都有点向上,就像它根本没有考虑导航栏一样。
我尝试在模拟指标选项中更改 topbar 属性,但它不起作用。它从 iOS6 中的 NavigationBar 考虑按钮的位置,但在 iOS7 中,它从屏幕顶部考虑它。
原因是什么?
提前致谢。
我在具有 NavigationBar 的 iOS6 和 iOS7 中运行相同的应用程序。它在 iOS6 上运行良好,但在 iOS7 中,所有视图都有点向上,就像它根本没有考虑导航栏一样。
我尝试在模拟指标选项中更改 topbar 属性,但它不起作用。它从 iOS6 中的 NavigationBar 考虑按钮的位置,但在 iOS7 中,它从屏幕顶部考虑它。
原因是什么?
提前致谢。
您应该使用下面的行在您的视图中修复它。
self.edgesForExtendedLayout = UIRectEdgeNone;
在《iOS 7 UI 过渡指南》中对于 Layout and Appearance 一文也提到了——在 iOS7 中,视图控制器使用全屏布局。
如果我们想让视图从导航栏显示如下位置,可以修改UIViewController的edgesForExtendedLayout这个属性来实现。
edgeForExtendedLayout 是一个 UIExtendedEdge 类型的属性,它指定要扩展的边缘的方向。
因为iOS7鼓励全屏布局,它的默认值自然是UIRectEdgeAll,都是围绕边缘延伸的,也就是说如果tabBar下连view有navigationBar,那么view就会覆盖到周边。
如果我们做如下设置视图,那么视图就不会延伸到那些栏后面,所以标签就出来了。查看源打印
self . edgesForExtendedLayout = UIRectEdgeNone ;
在 iOS 7 中,视图控制器使用全屏布局。它在 iOS 7 UI 转换指南中提到
如果要更改布局,请使用 edgesForExtendedLayout属性
例子:
if([UIViewController instancesRespondToSelector:@selector(edgesForExtendedLayout)])
self.edgesForExtendedLayout=UIRectEdgeNone;
我自己也有类似的问题,发现如果你关闭导航栏的半透明,视图会像在 iOS6 中一样下拉。
self.navigationController.navigationBar.translucent = NO;
在这个答案的时候,iOS 7 还在 NDA 下,所以不可能写出实际的解决方案。无论如何,为了提供帮助,我发布了一个仅供注册开发人员使用的帮助链接。
==== 原帖:====
阅读iOS 7 过渡指南。它的“更新 UI”部分解释了如何解决您的问题。
if([self respondsToSelector:@selector(edgesForExtendedLayout)])
[self setEdgesForExtendedLayout:UIRectEdgeBottom];