由于我的项目要适配到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. undo日志

    InnoDB’s Undo 前言 Undo log是InnoDB MVCC事务特性的重要组成部分.当我们对记录做了变更操作时就会产生undo记录,Undo记录默认被记录到系统表空间(ibdata)中, ...

  2. 单点登录技术:微软Passport单点登录协议和自由联盟规范

    随着互联网络应用的普及,越来越多的人开始使用互联网上提供的服务.然而目前提供服务的网站大多采用用户名.口令的方式来识别用户身份,这使得用户需要经常性的输入自己的用户名.口令.显然这种认证方式存在着弊端 ...

  3. 【Jenkins】linux下Jenkins集成ant进行编译并发送结果

    三个文章吧: 1 如何使用ant编译执行jmeter测试用例,并生成html报告 2 如何在Linux下搭建jenkins环境. 3 如何在Linux下搭建的jenkins中执行ant构建运行,并发送 ...

  4. BZOJ2038: [2009国家集训队]小Z的袜子(hose) 莫队算法

    要使用莫队算法前提 ,已知[l,r]的答案,要能在logn或者O(1)的时间得到[l+1,r],[l-1,r],[l,r-1],[l,r+1],适用于一类不修改的查询 优美的替代品——分块将n个数分成 ...

  5. 浏览器插件 - 通用注入模版JS

    //TIP:先通过Tampermonkey编写为可用脚本,再套用此通用模版,再拖到Chrome安装为扩展即可. /* 通用注入原型3:*/ switch (window.location.pathna ...

  6. Git 基础 - Git Aliases

    $ git config --global alias.co checkout $ git config --global alias.br branch $ git config --global ...

  7. 为Virtualbox中的Solaris10安装VBoxAdditions

    安装增强插件,以便能够和虚拟机拖放文件 1.启动虚拟系统,选择安装VirtualBox增强功 能(Guest Additions).在VirtualBox中选择“设备”->“安装增强功能”.Vi ...

  8. mybatis系列-03-入门程序

    3.1     需求 根据用户id(主键)查询用户信息 根据用户名称模糊查询用户信息 添加用户 删除 用户 更新用户 3.2     环境 java环境:jdk1.7.0_79 eclipse mys ...

  9. V&View更新

    这几天一直在做V&View的更新工作,这次的更新是质的变化,表面界面变化不大,可是内部确有着翻天覆地的改变. 这几天我主要做了一下几件事: 1. 重新构思了vview的文章发布形式,之前使用k ...

  10. mysql的group_concat的用法

    1.语法:group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) eg. SELECT ID, GROUP ...