由于我的项目要适配到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 <  ? [UIFont systemFontOfSize:] : [UIFont systemFontOfSize: 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对应的高度自动给一个对应的高度。注意这点可以避免布局时产生的问题。

4.viewDidLayoutSubviews

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

5.UIButton

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

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

谈谈项目中遇到的各种iOS7适配问题的更多相关文章

  1. 项目中常用的MySQL 优化

    本文我们来谈谈项目中常用的MySQL优化方法,共19条,具体如下: 一.EXPLAIN 做MySQL优化,我们要善用EXPLAIN查看SQL执行计划. 下面来个简单的示例,标注(1.2.3.4.5)我 ...

  2. 谈谈MVC项目中的缓存功能设计的相关问题

    本文收集一些关于项目中为什么需要使用缓存功能,以及怎么使用等,在实际开发中对缓存的设计的考虑 为什么需要讨论缓存呢? 缓存是一个中大型系统所必须考虑的问题.为了避免每次请求都去访问后台的资源(例如数据 ...

  3. 转:如何在Vue项目中使用vw实现移动端适配

    https://www.w3cplus.com/mobile/vw-layout-in-vue.html 有关于移动端的适配布局一直以来都是众说纷纭,对应的解决方案也是有很多种.在<使用Flex ...

  4. 在Vue项目中使用vw实现移动端适配

    有关于移动端的适配布局一直以来都是众说纷纭,对应的解决方案也是有很多种.在<使用Flexible实现手淘H5页面的终端适配>提出了Flexible的布局方案,随着viewport单位越来越 ...

  5. 如何在Vue项目中使用vw实现移动端适配(转)

    有关于移动端的适配布局一直以来都是众说纷纭,对应的解决方案也是有很多种.在<使用Flexible实现手淘H5页面的终端适配>提出了Flexible的布局方案,随着viewport单位越来越 ...

  6. Vue项目中使用vw实现移动端适配

    我们在vue移动端项目中的适配一般都采用rem,但是rem也不是能兼容所有的终端. 随着viewport单位越来越受到众多浏览器的支持,下面将简单介绍怎么实现vw的兼容问题,用vw代替rem 当我们采 ...

  7. 如何在Vue项目中使用vw实现移动端适配

    有关于移动端的适配布局一直以来都是众说纷纭,对应的解决方案也是有很多种.在< 使用Flexible实现手淘H5页面的终端适配>提出了Flexible的布局方案,随着 viewport 单位 ...

  8. iOS7适配问题

    iOS7适配问题 2013-09-28 08:32:37     我来说两句      作者:冻僵的企鹅 收藏    我要投稿 iOS 7发布了,适配问题来了,开发者都忙起来了. 先记一个iOS7 的 ...

  9. 3D游戏中的画质与效率适配

      哪里来的需求? 众所周知,由于不同的设备配置不同.导致其CPU和GPU处理能力有高有低.同样的游戏想要在所有设备上运行流畅且画面精美,是不可能的.这就需要我们针对不同的设备能力进行画质调节,以保证 ...

随机推荐

  1. Python中,如何初始化不同的变量类型为空值

    参考文章  Python中,如何初始化不同的变量类型为空值 常见的数字,字符,很简单,不多解释. 列表List的其值是[x,y,z]的形式 字典Dictionary的值是{x:a, y:b, z:c} ...

  2. 基于kryonet的RPC,使用kryo进行序列化

    Kryo是一个序列化框架. Kryonet是一个基于kryo的RPC框架,它实现了一套高效简洁的API,它通过NIO实现了TCP和UDP通讯,目前还不支持Http. 自己写了一个测试代码,运行了下,感 ...

  3. Java序列化 如何把多个对象存储在一个文件中

    /** * 用于保存模板文件,内容包括: * 1,标志位,1 int * 2,版本   1 int * 3,数据头长度 1 int * 4,预留数据头空间  5120 byte * 5,后续数据长度  ...

  4. Initializing nested object properties z

    public class Employee { public Employee() { this.Insurance = new Insurance(); } // Perhaps another c ...

  5. NGINX(七)分段下载

    前言 nginx分段下载通过ngx_http_range_filter_module模块进行处理,关于HTTP分段下载过程,可以参考HTTP分段下载一文,主要分为一次请求一段和一次请求多段 涉及数据结 ...

  6. [GRYZ2015]足球联赛

    问题描述 巴蜀中学新一季的足球联赛开幕了.足球联赛有n 只球队参赛,每赛季,每只球队要与其他球队各赛两场,主客各一场,赢一场得3 分,输一场不得分,平局两只队伍各得一分.英勇无畏的小鸿是机房的主力前锋 ...

  7. 线性存储结构-LinkedList

    LinkedList内部采用链表的形式构建,是一个双向链表.除了继承List外,还继承了Deque接口,可以当做堆栈结构使用. private static final class Link<E ...

  8. 【译】 AWK教程指南 9读取命令行上的参数

    大部分的应用程序都允许使用者在命令之后增加一些选择性的参数.执行awk时这些参数大部分用于指定数据文件文件名,有时希望在程序中能从命令行上得到一些其它用途的数据.本小节中将叙述如何在awk程序中取用这 ...

  9. Codeforces Round #359 (Div. 1)

    A http://codeforces.com/contest/685/standings 题意:给你n和m,找出(a,b)的对数,其中a满足要求:0<=a<n,a的7进制的位数和n-1的 ...

  10. HIbernate学习笔记(七) hibernate中的集合映射和继承映射

    九.       集合映射 1. Set 2. List a)        @OrderBy 注意:List与Set注解是一样的,就是把Set更改为List就可以了 private List< ...