33

我在具有 NavigationBar 的 iOS6 和 iOS7 中运行相同的应用程序。它在 iOS6 上运行良好,但在 iOS7 中,所有视图都有点向上,就像它根本没有考虑导航栏一样。

我尝试在模拟指标选项中更改 topbar 属性,但它不起作用。它从 iOS6 中的 NavigationBar 考虑按钮的位置,但在 iOS7 中,它从屏幕顶部考虑它。

原因是什么?

提前致谢。

iOS 6 截图

iOS 7 截图

4

6 回答 6

53

您应该使用下面的行在您的视图中修复它。

 self.edgesForExtendedLayout = UIRectEdgeNone;
于 2013-09-05T11:51:05.113 回答
14

在《iOS 7 UI 过渡指南》中对于 Layout and Appearance 一文也提到了——在 iOS7 中,视图控制器使用全屏布局。

如果我们想让视图从导航栏显示如下位置,可以修改UIViewController的edgesForExtendedLayout这个属性来实现。

edgeForExtendedLayout 是一个 UIExtendedEdge 类型的属性,它指定要扩展的边缘的方向。

因为iOS7鼓励全屏布局,它的默认值自然是UIRectEdgeAll,都是围绕边缘延伸的,也就是说如果tabBar下连view有navigationBar,那么view就会覆盖到周边。

如果我们做如下设置视图,那么视图就不会延伸到那些栏后面,所以标签就出来了。查看源打印

self . edgesForExtendedLayout = UIRectEdgeNone ;
于 2013-08-19T12:53:45.137 回答
8

在 iOS 7 中,视图控制器使用全屏布局。它在 iOS 7 UI 转换指南中提到

如果要更改布局,请使用 edgesForExtendedLayout属性

例子:

   if([UIViewController instancesRespondToSelector:@selector(edgesForExtendedLayout)])

        self.edgesForExtendedLayout=UIRectEdgeNone;
于 2013-09-03T17:03:57.847 回答
5

我自己也有类似的问题,发现如果你关闭导航栏的半透明,视图会像在 iOS6 中一样下拉。

self.navigationController.navigationBar.translucent = NO;
于 2013-10-04T11:03:39.313 回答
5

在这个答案的时候,iOS 7 还在 NDA 下,所以不可能写出实际的解决方案。无论如何,为了提供帮助,我发布了一个仅供注册开发人员使用的帮助链接。

==== 原帖:====

阅读iOS 7 过渡指南。它的“更新 UI”部分解释了如何解决您的问题。

于 2013-08-19T09:57:46.427 回答
3
if([self respondsToSelector:@selector(edgesForExtendedLayout)])
    [self setEdgesForExtendedLayout:UIRectEdgeBottom];
于 2013-10-01T09:35:36.287 回答