谈谈项目中遇到的各种iOS7适配问题
由于我的项目要适配到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适配问题的更多相关文章
- 项目中常用的MySQL 优化
本文我们来谈谈项目中常用的MySQL优化方法,共19条,具体如下: 一.EXPLAIN 做MySQL优化,我们要善用EXPLAIN查看SQL执行计划. 下面来个简单的示例,标注(1.2.3.4.5)我 ...
- 谈谈MVC项目中的缓存功能设计的相关问题
本文收集一些关于项目中为什么需要使用缓存功能,以及怎么使用等,在实际开发中对缓存的设计的考虑 为什么需要讨论缓存呢? 缓存是一个中大型系统所必须考虑的问题.为了避免每次请求都去访问后台的资源(例如数据 ...
- 转:如何在Vue项目中使用vw实现移动端适配
https://www.w3cplus.com/mobile/vw-layout-in-vue.html 有关于移动端的适配布局一直以来都是众说纷纭,对应的解决方案也是有很多种.在<使用Flex ...
- 在Vue项目中使用vw实现移动端适配
有关于移动端的适配布局一直以来都是众说纷纭,对应的解决方案也是有很多种.在<使用Flexible实现手淘H5页面的终端适配>提出了Flexible的布局方案,随着viewport单位越来越 ...
- 如何在Vue项目中使用vw实现移动端适配(转)
有关于移动端的适配布局一直以来都是众说纷纭,对应的解决方案也是有很多种.在<使用Flexible实现手淘H5页面的终端适配>提出了Flexible的布局方案,随着viewport单位越来越 ...
- Vue项目中使用vw实现移动端适配
我们在vue移动端项目中的适配一般都采用rem,但是rem也不是能兼容所有的终端. 随着viewport单位越来越受到众多浏览器的支持,下面将简单介绍怎么实现vw的兼容问题,用vw代替rem 当我们采 ...
- 如何在Vue项目中使用vw实现移动端适配
有关于移动端的适配布局一直以来都是众说纷纭,对应的解决方案也是有很多种.在< 使用Flexible实现手淘H5页面的终端适配>提出了Flexible的布局方案,随着 viewport 单位 ...
- iOS7适配问题
iOS7适配问题 2013-09-28 08:32:37 我来说两句 作者:冻僵的企鹅 收藏 我要投稿 iOS 7发布了,适配问题来了,开发者都忙起来了. 先记一个iOS7 的 ...
- 3D游戏中的画质与效率适配
哪里来的需求? 众所周知,由于不同的设备配置不同.导致其CPU和GPU处理能力有高有低.同样的游戏想要在所有设备上运行流畅且画面精美,是不可能的.这就需要我们针对不同的设备能力进行画质调节,以保证 ...
随机推荐
- 编译驱动时出现"Cannot open file trace.h"错误
编译驱动时出现"Cannot open file trace.h"错误 如题,用VS2013编译驱动是出现上述错误,原来是开启了WPP追踪导致的: 解决方案: 右键项目名-属性-W ...
- NOIP2008 双栈队列
1. 双栈排序 (twostack.pas/c/cpp) Tom 最近在研究一个有趣的排序问题.如图所示,通过 2 个栈 S1 和 S2,Tom 希望借助 以下 4 种操作实现将输入序列升序 ...
- ACM2123(一个简单的问题)
一个简单的问题 问题说明 在这个问题中,你需要做N * N的乘法表,就像样品.第第i 行和j 个列中的元素i和j的乘积(乘积). 输入 输入的第一行是一个整数C中表示测试用例的数量,然后C的测试用 ...
- 2014-02-27WPF学习笔记
//StackPanel布局 //创建时间:11:33 页面布局:Orientation默认纵向:Vertical水平为:Horizontal <Button> <Button.Co ...
- openstack api
1,Identity service generates authentication tokens that permit access to the openstack service REST ...
- HDU 3436--Queue-jumpers (树状数组 or Splay Tree)
树状数组这个真心想了好久,还是没想出来 %%% www.cppblog.com/Yuan/archive/2010/08/18/123871.html 树状数组求前缀和大于等于k的最大值,第一次看到这 ...
- JAVA中关于Map的九大问题
通常来说,Map是一个由键值对组成的数据结构,且在集合中每个键是唯一的.下面就以K和V来代表键和值,来说明一下java中关于Map的九大问题. 0.将Map转换为List类型 在java中Map接口提 ...
- Java网络编程(TCP协议-练习-上传文本文件)
客户端: package WebProgramingDemo; import java.io.BufferedReader; public class UploadTextClient { /** * ...
- Tomcat服务器配置文件uri编码设置
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" ...
- C++学习笔记(十七):RTTI
这个知识点被遗漏了,可以结合之前的这篇文章看类型转换这个知识点. RTTI(Run-Time Type Information,运行时类型信息)即程序能够使用基类的指针或引用来检查这些指针或引用所指的 ...