因为iOS7里面status bar和视图是重叠在一块儿了,因此应用的y坐标就无法和之前一致了,须要从新计算设定。基本上,你的应用用Xcode5运行一下就能看见这个问题,这里写了一个最简单的例子,一个View上加了一个Label控件,分别在iOS6和iOS7的模拟器上的样子。windows
从图上明显能够看到,iOS7上的应用y坐标起始计算点是从屏幕顶点算起,而iOS6是从status bar来算起,这个缘由是致使一切问题的根源。ui
好了,找到了问题就好办,我列举一下看到过的尝试过的方法:code
1. 修改window的frame坐标文档
这个思路是在iOS7系统里面把windows下拉20个pixel,这样可让开status bar的位置,因而一切都恢复了正常。方法
好处是不用每一个viewController来逐个修改,通常在AppDelegate.m一个文件里面修改便可。坏处是现实比想象的残酷,看起来简单方便的方法总有各类各样的问题,网上这样作的也各类吐槽,屡次努力没结果后我也放弃了继续钻研。im
2. 手动修改坐标样式
这个方法对于不使用XIB文件的学院派极客是惟一的方法,也没有任何问题,就是工做量大。另外,对于使用IB来辅助作UI的应用来讲就不太适合了。img
3. 修改Delta值文件
做为苹果公司来讲,推出iOS7时显然能够预计到这样的困境,它也确实给你们提供了解决方案。这个方案是苹果在官方文档里面介绍过的方案。view
首先是选择须要适配的IB文件,把Interface Builder Document里面的View as选择成iOS 6.1 and Earlier。
这样在IB里面各个控件都会变成iOS6的样式,但此时在iOS7上运行系统仍然会用iOS7的控件来显示,坐标也仍然不正确——貌似一点做用都没有。恩,这只是第一步,不用急,再作一步就能够实现适配了!
修改DeltaY的值,修改为什么值是根据你的实际状况定的,我这里显然就是status bar的高度,20个pixel。
再运行一下应用看看,viewController是否是已经适配好了?
这个方法简单直观,但须要在多个viewController里面一一作适配,不过整体工做量不大,适配效果也很良好,旋转屏幕等等都没有问题,因此个人应用最后采用了这种方法来适配,实际中工做量也不大。