iOS7适配总结

来源:互联网 发布:mac注音输入法 简体字 编辑:程序博客网 时间:2024/05/16 10:38

iOS7适配总结

iOS7的适配,之前一直用偷懒的方式,就是用iOS6SDK编译程序,这样在iOS7设备也是可以跑的,但是这样用不到iOS7的新特性,此外对于新上架的App来说,苹果规定了必须用iOS7 SDK发布,所以说不能偷懒要做到真正的适配,下面总结一些方面

 

状态栏

在iOS7的SDK中,状态栏是默认透明色的,且UIViewController会顶到屏幕最顶端,状态栏融入了视图,如果想做一种兼容iOS6的效果,那就得把Windwo往下错20px,上面就会留下原来状态栏的区域,但是是黑色的,没有任何电池,时间信息

sss1

这是因为状态栏文字依然是黑色,看不见了,那么改变状态栏的风格就是了

此外还需要修改一下info.plist

增加View controller-based status bar appearance为NO

这样就全局的状态栏变成白色可显示的了

sss2

 

 

这里可能会出现一个问题,window整体移动了,但是window上面的view可能没有改变,这样会被状态栏吃掉20px,解决办法把最外层view的frame重新调整,这是目前的方法,觉得比较山寨

更新:

发现在[self.window makeKeyAndVisible];这句话之前和之后修改window的frame效果是不同的…..总之如果在之前修改,修改了bounds,可以正常显示,但是主ViewController是往上错了20的;如果在之后修改frame,修改frame就可以了,不写改bounds那句话,具体的试试就知道了。

iOS6变化值

如果用ib的话有这么个工具可以随时查看你的xib在iOS7和iOS6下的区别,就是Assistant,如图,勾选右下角的iOS 6.1 and Earlier

屏幕快照 2014-01-21 下午2.38.32

 

这样可以直观的对比你的xib在不同系统的样子,这里注意一下我放了一个Label进去,origin的Y是20,是这样的

屏幕快照 2014-01-21 下午2.44.03

可以看到iOS7里面状态栏融入了viewcontroller,所以label是顶着状态栏的(透明状态栏),在iOS6里面有点儿偏下,那么能不能让label在iOS6里面顶着状态栏呢,常规方法可以用代码判断系统版本然后设置不同的frame,但是可以通过变化值简单的调整控件在iOS6里的样子,点选label,然后如图设置

屏幕快照 2014-01-21 下午2.46.50

 

这个iOS 6/7 Deltas值设置就是设置控件在iOS6系统下基于iOS7的IB做出的变化,可以看到我设置了label的Y减了20,也就是说label在iOS6里面的Y值会比7少20,那实际情况是这样么?

屏幕快照 2014-01-21 下午2.48.56

 

成功了!同理我可不可以改一下按钮的高度变化呢?这里按钮是系统圆角,所以外形会有很大区别,便于演示大小用

下面点选Button然后把Height改为90,那么在iOS6里面会比7里面Button高了90

屏幕快照 2014-01-21 下午2.50.43

 

成功了!那么,这有什么用呢?在iOS6下,view里面放个控件如果是{0,0,x,x}的话,控件是刚好顶在状态栏下面的,但是在iOS7里的话是何状态栏重叠的,因为视图是全屏的嘛,所以说如果在iOS7里状态栏frame为{0.20.x.x}的话就可以不和状态栏重叠了,而且在iOS6里面依然紧贴在状态栏下面,就这个作用

UITabelviewCell变化

uitableview我发现里面的subview如果超出了cell范围,在iOS7里就会被切掉,但是在iOS6里就没事儿,但是打印cell的clipbounds明明是NO,解决方法是这个

事实上在iOS7之前contentView的superview就是cell,但是在iOS7里contentView的superview是UITableViewCellScrollView,这里需要注意

 

 

 适配iOS7原则

经过这段时间的练习和调研,发现试图在iOS7里恢复和iOS6一样的UI是行得通的,但是是绝对不建议的,最佳实践,也是苹果官方推荐的适配方式应该是按照iOS7的UI风格设计,那么就不应该费尽心力去在iOS7的SDK回复iOS6的状态栏效果,透明就透明好了,只需要让UINavigationBar加高20px就好,一些细节可以用变化量操控

0 0
原创粉丝点击