我最近下载了Xcode 5 DP来测试我在iOS 7中的应用程序.我注意到并确认的第一件事是我的视图边界并不总是调整大小来考虑状态栏和导航栏.
在viewDidLayoutSubviews,我打印视图的边界:
{{0,0},{320,568}}
这导致我的内容出现在导航栏和状态栏下方.
我知道我可以通过获取主屏幕的高度,减去状态栏的高度和导航栏的高度来解释自己的高度,但这似乎是不必要的额外工作.
我该如何解决这个问题?
更新:
我找到了解决这个特定问题的方法.将导航栏的半透明属性设置为NO:
self.navigationController.navigationBar.translucent = NO;
Run Code Online (Sandbox Code Playgroud)
这将修复视图在导航栏和状态栏下面的框架.
但是,当您希望导航栏为半透明时,我还没有找到解决此案例的方法.例如,在全屏查看照片时,我希望导航栏是半透明的,并且要在其下方构建视图.这是有效的,但当我切换显示/隐藏导航栏时,我经历了甚至更奇怪的结果.第一个子视图(UIScrollView)每次都会更改其边界.
我尝试在iOS 7中测试我的应用程序,然后我发现我的视图显示在状态栏上...正如我读到的,在iOS 7中,状态栏被隐藏.那么如何让它兼容在iOS 6和iOS 7中运行?我是否必须为每个屏幕为不同的iOS版本制作不同的.xib文件?
我一直在阅读:如果标准应用程序的两个版本都应该具有类似的布局,请使用"自动布局"创建在两个版本的iOS中都能正常工作的UI.要支持多个版本的iOS,请指定一组约束,Auto Layout可以使用这些约束来调整storyboard或XIB文件中的视图和控件(要了解有关约束的更多信息,请参阅"约束Express视图之间的关系").
如果标准应用的两个版本都应具有相似的布局,并且您没有使用自动布局,请使用偏移.要使用偏移,请首先更新iOS 7的UI.接下来,指定将早期UI中每个元素的原点,高度和宽度定义为iOS 7 UI中元素新位置的偏移量的值.
但是当我在.xib中使用autolayout时,它会显示一个错误,autolayout在iOS 6的先前版本中.
我该如何解决这个问题?