那些年适配iOS7遇到的坑

1. 字体


iOS7中的字体适配恐怕是最麻烦的坑了,原因是iOS7以上的许多字体在7都是不存在的,甚至包括一些system-字体。比如system-black、system-medium等,如果你使用了black,在7以上显示没有问题,但在7里就变成了中空显示,并且在换成system-medium后,还会出现文字被切割的神奇现象,究其原因就是iOS7中没有system-black,在字体渲染上出了问题。所以使用字体要小心了,如果一定要使用system-black,需要做类似以下兼容:

headerLbl.font = [[[UIDevice currentDevice] systemVersion] floatValue] < 8 ? [UIFont systemFontOfSize:14] : [UIFont systemFontOfSize:14 weight:UIFontWeightMedium];

额外提一句,如果你在storyboard或xib中加载了一个并不存在的字体,在进入这个storyboard加载的页面会变得异常缓慢,因为系统会遍历整个字体库去查找一个不存在的字体,发现找不到后他只能拿system字体代替,所以不要试图加载你项目中没有的字体。

另外,在iOS9中默认字体变成了San Francisco字体,取代早前的Helvetica字体,在风格上有些许区别的同时,字体高度和文字布局也有差异,如果你的label是写死了高度约束的就要注意了,在更新到iOS9后,你的内容看起来会像被切掉了顶部。由于网上有许多9适配的资料,这里就不再赘述了。

2. 动画


iOS7的动画有一个时序问题。最简单的一个场景就是,点击actionSheet的一个选项,actionSheet收起的同时,弹出一个alertView,如果这两个动画同时执行,alertView可能会闪一下就消失了,也可能正常显示,取决于alertView中的文字内容的长度。如果文字内容较多,导致alertView的layer来不及渲染,alertView会闪一下消失。解决方案就是在actionSheet的dismiss动画结束后,再弹出alertView,dismiss可以用一个代理方法监听:

- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex {
    // show alertView here!
}

3. UILabel


iOS7中,如果不对label设置高度约束或给height赋值,当label里面无内容时,高度默认为0;而iOS7以后,即使label无内容,会根据label默认的fontSize对应的高度自动给一个对应的高度。注意这点可以避免页面在还没拿到请求数据时label的布局异常。

4. viewDidLayoutSubviews


iOS7中这个方法可能会导致崩溃,稳妥的处理是在viewDidLayoutSubviews方法末尾添加[self.view layoutsubviews];

5. UIButton


iOS7下 button的normal和selected状态的title是分开的,设置了normal并不会设置selected的title,需要分别设置。

目前能想到的就这么多,欢迎补充~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,228评论 4 61
  • 当你想放弃的时候就想想关心自己的人,想想自己已经付出过的努力,想想自己放弃之后要承担的更加难过的后果,想想如果坚持...
    影帝黄博阅读 287评论 0 1
  • 相信很多人年少时都有过这样的梦想:我是超级英雄,我要拯救人类,拯救世界,拯救全宇宙。 那么,今天我们来聊一聊一只叫...
    丹樱阅读 479评论 3 3
  • 虽然还没开学,但我和部分家长们,已经奔波在来回补习班的路上,昨天,是最后一场考试,孩子们去考试了,我和另一位家...
    忆苦思甜啊阅读 300评论 3 0
  • 创建信号量 int sem_creat(key_t key){ int semid = 0; semid = se...
    8dc010427b39阅读 335评论 0 0