最近把开发环境升级到xcode5了,sdk也升级到了ios7了,也和大家一样遇到一些郁闷的问题。不过首先值得肯定的是xib文件变小了,网上很多说小到只有原来的十分之一,在我这里也是这样的。
最令我头痛的问题是状态栏的问题,我想很多人也遇到了,下面说说我是怎么解决的。
1,首先推荐下官方文档 https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/TransitionGuide/SupportingEarlieriOS.html#//apple_ref/doc/uid/TP40013174-CH14-SW1 网上有些别的处理方式,但总觉得不靠谱。英语好的推荐来看下,像我这种英语不好的也咬咬牙来看下。
2,头痛的是我们发现,状态栏在 <=ios6 是有占20个像素的,viewController.view的y坐标是用第20个像素开始的。但是在ios7中状态栏是不占空间的,他是半透明漂浮在view上面的。所以问题就在于如果我把subView从y坐标的0位置开始布局,则在<=ios6中显示正常,在ios7中却会部分被状态栏覆盖。如果在View上预留20个像素。则在ios7中正常,在<=ios6中就会多出一段空白。
3,解决办法就是在ios7中把subview全部往下移,以在最上方留出20像素的空间来显示状态栏。可是如何来实现这个呢?看上面推荐的官方文档。
4,看完官方文档后,我采用的方式是:
4.1,取消勾选use autolayout。说实话,不取消勾选时如何来实现我是还不会。
取消勾选的目的是,取消之后才会有这个deltas值
4.2,填deltas值 deltaY=Y_ios6 – Y_ios7。按照第二条的分析,我们希望ios6下Y_ios6等于0,ios7下Y_ios7等于20,那么deltaY就应该是 -20。因为把y下移了,而屏幕大小不变,所以这边应该同时把deltaHeight设置成 20(Height_ios6 – Height_ios7)。所以这边的结果是
4.3,可是如果每个控件都改,那不是很累吗,而且改动的太多了,不是吗?以下是本人想到的一个馊主意,供参考。比如我工程中得一个view是这样子的:
修改时,我新增了一个view,把原来的View作为新增view的subview。把与viewcontroller关联的view重新关联到新增的View上来。修改后结果如下:
view1的为新增的view。这样之后只需要对view进行delta设置,其他控件不用再设置了。
5,对状态栏的适配至此就完成了。当然了对屏幕大小的适配还要调整Autosizing,这个大家自己修改了。