状态栏和导航栏出现在我的视图的边界上,在IOS 7中

状态栏和导航栏出现在我的视图的边界上,在IOS 7中

我最近下载了Xcode在iOS 7中测试我的应用程序。我注意到并确认的第一件事是,我的视图边界并不总是调整大小来说明状态栏和导航栏。

在……里面viewDidLayoutSubviews,我打印视图的界限:

{{0, 0}, {320, 568}}

这将导致我的内容出现在导航栏和状态栏下面。

我知道我可以通过获取主屏幕的高度、减去状态栏的高度和导航栏的高度来说明自己的高度,但这似乎是不必要的额外工作。

我怎样才能解决这个问题?

最新情况:

我找到了解决这个具体问题的办法。将导航条的半透明属性设置为否:

self.navigationController.navigationBar.translucent = NO;

这将修复在导航栏和状态栏下面的视图。

但是,当您希望导航条是半透明的时,我还没有找到解决方案。例如,查看图片全屏,我希望导航条半透明,和视图被框在它下面。这是可行的,但是当我切换显示/隐藏导航栏时,我已经体验到了更奇怪的结果。第一个子视图(UIScrollView)得到它的界限y原点每次更改。


qq_笑_17
浏览 641回答 3
3回答

胡子哥哥

您可以通过实现一个名为edgesForExtendedLayout在iOS 7 SDK中。为此,请添加以下代码,if ([self respondsToSelector:@selector(edgesForExtendedLayout)])         self.edgesForExtendedLayout = UIRectEdgeNone;您需要在您的-(void)viewDidLoad方法。IOS 7会给布局和自定义您的外观带来一些更改。UI..视图控制器布局、色调颜色和字体的更改将影响所有乌伊基特对象在您的应用程序中。此外,对手势识别器API的增强为您提供了对手势交互的更细粒度的控制。使用视图控制器在IOS 7中,视图控制器使用全屏布局.同时,IOS 7对视图控制器的视图布局方式提供了更细粒度的控制。特别是,全屏布局的概念已经被细化,让视图控制器指定其视图的每个边缘的布局。这个wantsFullScreenLayout视图控制器属性在IOS 7中不建议使用。wantsFullScreenLayout = NO在iOS 7中运行时,视图控制器可能会在意外的屏幕位置显示其内容。若要调整视图控制器的视图布局方式,UIViewController提供下列属性:EDgesfortendedLayout这个edgesForExtendedLayout属性使用UIRectEdge类型,它除了指定“无”和“全部”之外,还指定矩形的四个边中的每一个。使用edgesForExtendedLayout指定应扩展视图的哪些边缘,而不管条形半透明。默认情况下,此属性的值为UIRectEdgeAll.扩展LayoutIncludeesOpaqueBars如果您的设计使用不透明的条,请改进。edgesForExtendedLayout还可以通过设置extendedLayoutIncludesOpaqueBars财产不..(默认值为extendedLayoutIncludesOpaqueBars是不.)自动调整ScrollViewInset如果不希望自动调整滚动视图的内容嵌入,请设置automaticallyAdjustsScrollViewInsets到不..(默认值为automaticallyAdjustsScrollViewInsets是是.)TopLayoutGuide,底部LayoutGuide这个topLayoutGuide和bottomLayoutGuide属性指示视图控制器视图中顶部或底部条边的位置。如果条形图应与视图的顶部或底部重叠,则可以使用InterfaceBuilder将视图相对于该条定位,方法是在topLayoutGuide或者到底层指南的顶端。(如果没有条形图应重叠视图,则topLayoutGuide与视图的顶部和bottomLayoutGuide与视图底部相同。)这两个属性都是在请求时延迟创建的。请参考,苹果文档

天涯尽头无女友

您不需要计算出将所有东西向下移动到什么程度,这里有一个在属性中的构建。在InterfaceBuilder中,突出显示视图控制器,然后导航到属性检查器。在这里,您将看到一些复选框旁边的单词“扩展边缘”。正如您所看到的,在第一个屏幕截图中,默认的选择是内容出现在顶部和底部的栏下,而不是在不透明的条下,这就是为什么将条形样式设置为不半透明的原因。正如您在第一个屏幕截图中所看到的那样,在导航栏下面隐藏了两个UI元素。(我在IB中启用了线框来说明这一点)这些元素、UIButton和UISegmentedControl都将其“y”原点设置为零,视图控制器被设置为允许顶部栏以下的内容。第二个屏幕截图显示了取消选中“顶部栏下”复选框时会发生什么。如您所见,视图控制器视图已被适当地向下移动,使其原点正好位于导航栏下面。也可以通过使用-[UIViewController edgesForExtendedLayout]..这里有一个指向类引用的链接EDGEFortendedLayout,以及为了UIRectEdge[self setEdgesForExtendedLayout:UIRectEdgeNone];

长风秋雁

我以编程的方式创建了我的视图,并最终为我工作:- (void) viewDidLayoutSubviews {     // only works for iOS 7+     if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {         CGRect viewBounds = self.view.bounds;         CGFloat topBarOffset = self.topLayoutGuide.length;         // snaps the view under the status bar (iOS 6 style)         viewBounds.origin.y = topBarOffset * -1;         // shrink the bounds of your view to compensate for the offset         viewBounds.size.height = viewBounds.size.height + (topBarOffset * -1);         self.view.bounds = viewBounds;     }}来源(在TopLayoutGuide第39页底部的一节)。
打开App,查看更多内容
随时随地看视频慕课网APP