因为个人项目要适配到iOS7.1, 而如今已是9时代了,在实际工做中我也是遇到了各类奇葩的坑,因此我想尽快把遇到的iOS7适配问题和解决方案分享出来,之后这些东西可能就用处不大了。布局
1.字体问题字体
iOS7中的字体适配恐怕是最麻烦的坑了,缘由是iOS7以上的许多字体在7都是不存在的,甚至包括一些system-字体。好比system-black,若是你使用了black,在7以上黑体显示没有问题,但在7里就变成了中空显示,而且你把它换成system-medium后,还会有文字被切割的神奇现象,究其缘由就是7下没有system-black,在字体渲染上出了问题。因此使用字体要当心了,若是必定要使用system-black,能够用system-medium代替,或者作相似如下兼容:动画
headerLbl.font = IOS_VERSION < 8 ? [UIFont systemFontOfSize:14] : [UIFont systemFontOfSize:14 weight:UIFontWeightMedium];
额外提一句,若是你在storyboard或xib中加载了一个并不存在的字体,在进入这个storyboard加载的页面会变得异常缓慢,由于系统会遍历整个字体库去查找一个不存在的字体,发现找不到后他只能拿system代替,因此不要试图加载你项目中没有的字体。spa
另外,在iOS9中默认字体变成了San Francisco字体,取代早前的Helvetica字体,在风格上有些许区别的同时,字体高度和文字布局也有差别,若是你的label是写死了高度约束的就要注意了,在更新到iOS9后,你的内容看起来会像被切掉了顶部。因为网上有许多9适配的资料,这里就再也不赘述了。代理
2.动画问题code
iOS7的动画有一个时序问题。最简单的一个场景就是,点击弹出来的一个actionSheet,actionSheet收起的同时,弹出一个alertView,若是这两个动画同时执行,alertView可能会闪一下就消失了,也可能正常显示,取决于alertView中的文字内容的长度。若是文字内容较多,致使alertView的layer来不及渲染,alertView会闪一下消失。解决方案就是在actionSheet的dismiss动画结束后,再弹出alertView,dismiss能够用一个代理方法监听:orm
- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex { // show alertView here! }
3.UILabelblog
iOS7中,若是不对label设置高度约束或给height赋值,当label里面无内容时,高度默认为0;而iOS7之后,即便label无内容,会根据label默认的fontSize对应的高度自动给一个对应的高度。注意这点能够避免布局时产生的问题。 ci
4.viewDidLayoutSubviewsit
iOS7中这个方法可能会致使崩溃,稳妥的处理是在viewDidLayoutSubviews方法末尾添加[self.view layoutsubviews];
5.UIButton
iOS7下 button的normal和selected状态的title是分开的,设置了normal并不会设置selected的title,须要分别设置。
目前能想到的就这么多,欢迎补充~