StoryBoard和代码结合 按比例快速兼容iPhone6/6 Plus教程
2015-11-06 12:19
351 查看
现在由于苹果公司出了6和6Plus,让写苹果程序的哥们为了做兼容很头疼。用StoryBoard固然方便,但是后期做兼容要花费太多的时间和精力。
使用AutoLayout虽然会在不同尺寸的屏幕下自动布局,但是很多东西还是要自己手动修改,而且使用AutoLayout的话有一个弊病,就是无法通过代码来修改StoryBoard上控件的尺寸和位置。
使用纯代码搭建界面又会觉得不够直观,要花时间调整布局,虽然方便后期做调整兼容性,但是影响开发效率。
当然个人觉得还是代码和StoryBoard结合的方式比较方便。
先说下使用本方法的要求,首先iPhone5的界面一定要完全兼容,这样才能完美兼容6和6Plus。
首先,我么我们要观察一下5,6和6Plus的尺寸比例关系。发现了他们的关系后待会做兼容就明白了。
![](http://api.cocoachina.com/uploads/20141230/1419929894173161.png)
很明显能看出这三种屏幕的尺寸宽高比是差不多的,因此可以在5的基础上,按比例放大来兼容6和6Plus的屏幕。
在AppDelegate.h中
如果是5,autoSizeScaleX=1,autoSizeScaleY=1;
如果是6,autoSizeScaleX=1.171875,autoSizeScaleY=1.17429577;
如果是6Plus,autoSizeScaleX=1.29375,autoSizeScaleY=1.2957;
现在我们获取了比例关系后,先来看一下如何解决代码设置界面时的兼容。
CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)这个方法使我们常用的设置尺寸的方法,现在我设置了一个类似于这样的方法。
在.m文件中
代码兼容完之后,来看一下StoryBoard的兼容,当然,在平时的项目中我们不可能就一两个视图,而且每个视图里面可定还套有很多其他视图,如果把所有视图的尺寸用手动输入CGRectMake的方法来改兼容的话工作量非常大,而且容易出错。经过多次试验,我想出一种能快速兼容大多数界面的方法
在AppDelegate.m中
在继承了UIViewController的.m文件中
现在我们来看一下使用了该方法兼容的前后对比效果吧。
iPhone6兼容前
![](http://api.cocoachina.com/uploads/20141230/1419930060390028.png)
iPhone6兼容后
![](http://api.cocoachina.com/uploads/20141230/1419930093320718.png)
iPhone6Plus兼容前
![](http://api.cocoachina.com/uploads/20141230/1419930120761685.png)
iPhone6Plus兼容后
![](http://api.cocoachina.com/uploads/20141230/1419930149510944.png)
如果整个项目做完后才开始做兼容的话这个方法的优势就体现出来了,面对几十个工程文件,只需自定义并且替换你的CGRectMake方法,再加上storyBoradAutoLay这个方法就瞬间完成大部分甚至全部的兼容。
其实还是比较建议用代码和StoryBoard结合的方式来写代码,无论是从做兼容还是效率来说都是比较好的。
如果遇到tableView的或者其他的兼容改动,手动调整一下即可。
相关文章推荐
- Github的Windows客户端创建分支
- C#排序函数和自定义比较器
- C++ Primer 学习笔记_26_标准I/O库(续) --文件的输入与输出、字符串流
- C++ Primer 学习笔记_25_标准I/O库 --面向对象的标准库、条件状态、输出缓冲区的管理
- C++ Primer 学习笔记_24_函数(续3) --重载函数、指向函数的指针
- C++ Primer 学习笔记_23_函数(续2) --局部对象、内联函数、类的成员函数
- C++ Primer 学习笔记_22_函数(续1) --return语句、递归调用、函数声明
- PHP原生DOM对象操作XML
- C++ Primer 学习笔记_21_函数 --函数定义、参数传递
- C++ Primer 学习笔记_20_语句(续) --break/continue/try,catch
- C++ Primer 学习笔记_19_语句 --if/switch/while/for语句
- 利用c语言实现在一个3*3棋盘游戏
- C++ Primer 学习笔记_18_表达式(续2) --new/delete表达式与类型转换
- C++ Primer 学习笔记_17_表达式(续1) --箭头、条件、sizeof、逗号表达式与复合表达式求值
- asp.net mvc 中的模型绑定
- Java EE Containers
- C++ Primer 学习笔记_16_表达式 --算术、关系、逻辑、位、赋值、自增/自减操作符
- C++ Primer 学习笔记_15_新旧代码兼容与多维数组
- 35 个 Java 代码性能优化总结
- python模块pymysql