您的位置:首页 > 移动开发 > IOS开发

也来说说ios6 ios7的状态栏适配的问题

2013-12-04 10:44 225 查看
最近把开发环境升级到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,这个大家自己修改了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: