我最近下载了Xcode http://en.wikipedia.org/wiki/Xcode5 DP 在 iOS 7 中测试我的应用程序。我注意到并确认的第一件事是我的视图边界并不总是调整大小以适应状态栏和导航栏。
In viewDidLayoutSubviews
,我打印视图的边界:
{{0, 0}, {320, 568}}
这导致我的内容出现在导航栏和状态栏下方。
我知道我可以通过获取主屏幕的高度,减去状态栏的高度和导航栏的高度来计算自己的高度,但这似乎是不必要的额外工作。
我该如何解决这个问题?
Update:
我找到了解决这个特定问题的方法。将导航栏的半透明属性设置为NO:
self.navigationController.navigationBar.translucent = NO;
这将修复导航栏和状态栏下方的视图。
但是,当您希望导航栏半透明时,我还没有找到解决方案。例如,全屏查看照片时,我希望导航栏半透明,并且视图位于其下方。这可行,但是当我切换显示/隐藏导航栏时,我遇到了更奇怪的结果。第一个子视图(UIScrollView)每次都会更改其边界 y 原点。
您可以通过实现一个名为的新属性来实现这一点edgesForExtendedLayout
在iOS7 SDK中。请添加以下代码来实现此目的,
if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
self.edgesForExtendedLayout = UIRectEdgeNone;
您需要将以上内容添加到您的-(void)viewDidLoad
method.
iOS 7 对布局和自定义方式带来了一些变化
你的外表UI。视图控制器布局、色调的变化
颜色和字体影响所有UIKit您的应用程序中的对象。在
此外,手势识别器 API 的增强功能让您可以更好地识别手势
对手势交互的精细控制。
使用视图控制器
在 iOS 7 中,视图控制器使用全屏布局。同时,
iOS 7 使您可以更精细地控制视图控制器的方式
阐述其观点。特别是全屏布局的概念
已经过改进,让视图控制器指定每个视图的布局
其视野的边缘。
The wantsFullScreenLayout
视图控制器属性已弃用
iOS 7。如果您当前指定wantsFullScreenLayout = NO
, 风景
控制器可能会在意外的屏幕位置显示其内容
当它在 iOS 7 中运行时。
要调整视图控制器如何布局其视图,UIViewController
提供以下属性:
The edgesForExtendedLayout
属性使用UIRectEdge
类型,
除了指定矩形的四个边之外,它还指定了每个边
指定无和全部。使用edgesForExtendedLayout
指定哪个
无论条形半透明度如何,视图的边缘都应该延伸。经过
默认情况下,该属性的值为UIRectEdgeAll
.
如果您的设计使用不透明条,请改进edgesForExtendedLayout
经过
还设置extendedLayoutIncludesOpaqueBars
财产给NO。 (默认值为extendedLayoutIncludesOpaqueBars
is NO.)
如果您不希望滚动视图的内容插入自动
调整、设定automaticallyAdjustsScrollViewInsets
to NO。 (这
默认值automaticallyAdjustsScrollViewInsets
is YES.)
The topLayoutGuide
and bottomLayoutGuide
属性表明
视图控制器视图中顶部或底部栏边缘的位置。
如果条形图应与视图的顶部或底部重叠,您可以使用
Interface Builder 通过创建相对于栏定位视图
底部的约束topLayoutGuide
或到顶部
底部布局指南。 (如果没有条形图与视图重叠,则topLayoutGuide
与视图的顶部和bottomLayoutGuide
与视图底部相同。)两者
属性是根据请求延迟创建的。
请参考,苹果文档 https://developer.apple.com/library/prerelease/ios/documentation/UserExperience/Conceptual/TransitionGuide/AppearanceCustomization.html#//apple_ref/doc/uid/TP40013174-CH15-SW1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)