ios 7 UiView框架问题

PK8*_*K86 33 frame uinavigationbar uiviewcontroller uiview ios7

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

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

它是什么原因?

提前致谢.

iOS 6截图

iOS 7截图

sin*_*h99 53

您应该使用以下行在视图中修复它.

 self.edgesForExtendedLayout = UIRectEdgeNone;
Run Code Online (Sandbox Code Playgroud)

  • 我认为在设置此属性之前检查更好:`[self respondsToSelector:@selector(edgesForExtendedLayout)]` (2认同)

PK8*_*K86 14

在用于布局和外观的"iOS 7 UI过渡指南"中还提到了 - 在iOS7中,视图控制器使用全屏布局.

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

edgesForExtendedLayout是一个类型UIExtendedEdge属性,指定要扩展的边的方向.

因为iOS7鼓励全屏布局,其默认值自然是UIRectEdgeAll,两者都围绕边缘延伸,也就是说,如果甚至有视图navigationBar,在tabBar下,则视图会将覆盖范围扩展到周围区域.

如果我们进行以下设置视图,那么视图将不会扩展到栏后面的那些视图,因此标签出来了.查看源打印

self . edgesForExtendedLayout = UIRectEdgeNone ;
Run Code Online (Sandbox Code Playgroud)


小智 8

在iOS 7中,视图控制器使用全屏布局.在iOS 7 UI Transition Guide中提到了它

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

例:

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

        self.edgesForExtendedLayout=UIRectEdgeNone;
Run Code Online (Sandbox Code Playgroud)


Taf*_*soh 5

在回答这个问题时,iOS 7仍处于NDA状态,因此无法编写实际的解决方案.无论如何,我发布了一个仅供注册开发人员使用的帮助链接.

====原帖:====

阅读iOS 7过渡指南.其"更新用户界面"部分介绍了如何解决问题.

  • 在我的帖子发布时,iOS 7仍处于NDA状态,因此唯一可以提供帮助的方法是指向只有注册开发人员才能访问的官方指南. (2认同)

djn*_*ely 5

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

self.navigationController.navigationBar.translucent = NO;
Run Code Online (Sandbox Code Playgroud)