谈谈项目中遇到的各种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处理能力有高有低.同样的游戏想要在所有设备上运行流畅且画面精美,是不可能的.这就需要我们针对不同的设备能力进行画质调节,以保证 ...
随机推荐
- Android ViewTreeObserver简介
Android ViewTreeObserver简介 一.结构 public final class ViewTreeObserver extends Object java.lang.Objec ...
- Selenium webdriver 之select 控件封装,解决onchange问题
使用webdriver的时候,select 控件经常会绑定onchange 事件,在selenium2.09 之前click 方法对onchange 事件有bug,2.09 以后修复了,但是根据经验也 ...
- CSLA.NET 简介
CSLA.NET 据说在国外用的很多,国内介绍这个框架的文章目前网络上能找到的比较早,大多是早期的一些版本的版本的介绍.目前最新版的4.5.6 .版本的整体架构已经有了很大的变化.拟开一个系列,结合〈 ...
- 8.1.C++ AMP简介
C++ AMP是专为设计支持C++的异构并行模型. 全程是: Accelerator Massive Parallelism 下面是一个Vector C++ AMP的代码,通过这段代码来解释C++ A ...
- 恒天云技术分享系列3 – KVM性能调优
恒天云技术分享:http://www.hengtianyun.com/download-show-id-11.html KVM是什么 KVM 是 kernel-based Virtual Machin ...
- Linux更改默认jdk
RHEL默认安装Open JDK--java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64,现在要换成Oracle JDK1.7.0_51 1. (可选)删 ...
- Pritunl:简易搭建个人VPN及年费200的超编译独立主机 BandwagonHost
https://pao-pao.net/article/213 Pritunl:简易搭建个人VPN 文/ Vergil 一 直以来安装 VPN 服务.提供全局加密代理,是租用VPS(虚拟主机)的一个重 ...
- ubuntu 13.04下sublime text 3使用中文输入法
主要思路参考 http://blog.yanwen.org/archives/1955.html libsublime-imfix.so 这个库自己编译和从他这下载的 md5一样.可以不用编译了.直接 ...
- [iOS基础控件 - 6.8] 各种数据类型的@property属性
A.内存管理 NSString: copy 基本数据类型.结构体(int, CGFloat, BOOL, CGRect等):assign 对象(如自定义model类型.NSArray.NSDictio ...
- MAC 终端 显示隐藏文件 关闭显示隐藏文件
1.显示隐藏文件夹显示:defaults write com.apple.finder AppleShowAllFiles -bool true (1)复制“defaults write com.ap ...