iOS系统差异

1. 在使用automaticDimension自动计算高度时,要注意,因为iOS11之前是默认关闭Self-Sizing,而iOS11后默认开启Self-Sizing,所以在iOS11之前是需要设置预估高度来自动计算高度。

  tableView.rowHeight = UITableView.automaticDimension
  //先关闭预估高度,防止MJRefresh,上拉加载时异常跳动,因为开启Self-Sizing之后,tableView使用了estimateRowHeight属性,这样就会造成contentSize和contentOffset值的变化,而MJRefresh正是监听了contentOffset的变化,所以会造成在iOS11及以后,使用预估高度后,MJRefresh在上拉加载的时候回异常跳动。
  tableView.estimatedRowHeight = 0
  tableView.estimatedSectionHeaderHeight = 0
  tableView.estimatedSectionFooterHeight = 0
  //在使用回调设置预估高度,防止iOS10的时候显示异常
    func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
        return 44
    }
10异常,12正常.jpeg

总结 : 使用automaticDimension时,为了适配iOS9、iOS10、iOS11、iOS12等系统,同时为了防止出现MJRefresh的bug,所以我建议先设置estimated属性为0,然后在代理回调中返回预估高度。`

2. 在使用安全区域时,iOS10和iOS12有所差异:

例如:设置控件距离顶部安全区域的约束为0,
在iOS10中,控件的Y坐标为0
在iOS12中,控件的Y坐标为20/64

10异常,12正常.jpeg

总结:为了适配多系统,最好不要使用安全区域来控制顶部距离;
想控制顶部的距离,可以先设置一个距离顶部的约束,然后根据机型的不同,调整约束为导航栏的高度

3. 使用UIScrollView及其子类的时候,要注意iOS10系统和iOS12之间的差异:

`如果不加下面代码,在iOS10就会出现异常布局`
if #available(iOS 11.0, *) {
    imageCollectionView.contentInsetAdjustmentBehavior = .never
} else {
    self.automaticallyAdjustsScrollViewInsets = false
}

10异常,12正常.jpeg

总结:当界面中有ScrollView及其子类的时候,最好将automaticallyAdjustsScrollViewInsets手动赋值,以避免不同系统带来的差异

4.

欢迎大家补充新的差异及导致这些差异的原因,2019共同进步!

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

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,135评论 1 32
  • 因为要结局swift3.0中引用snapKit的问题,看到一篇介绍Xcode8,swift3变化的文章,觉得很详细...
    uniapp阅读 4,467评论 0 12
  • 一池荷花渐次开,看惯了绿叶红花,今天换种颜色,条条大路通罗马,看看不一样!
    虎头符阅读 199评论 0 0
  • Quik——轻松制作电子相册 用这款APP,几分钟之内,你就可以做一个像模像样的小视频。它预置了各种出色的主题,你...
    叶冷随记阅读 876评论 0 0