ios 11适配相关

1.UITableview UICollectionView MJRefresh下拉刷新错乱

automatic 和scrollableAxes一样,scrollView会自动计算和适应顶部和底部的内边距并且在scrollView 不可滚动时,也会设置内边距.

scrollableAxes 自动计算内边距.

never不计算内边距

always 根据safeAreaInsets 计算内边距

很显然,我们这里要设置为 never

if (@available(iOS 11.0, *)) {
self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;//UIScrollView也适用
}else {
self.automaticallyAdjustsScrollViewInsets = NO;
}
2.tableView默认使用Self-Sizing

这个配合estimatedRowHeight、estimatedSectionFooterHeight、estimatedSectionHeaderHeight使用,可以预估高度。之前,设置高度为0时,需要设置height=0.1,才会起作用,如果直接设置为0,则会使用默认高度,由于自动使用预估高度,所以,忽略了设置的高度,使原来的高度增大了。只要把这几个属性设置为0就可以解决。

可以通过以下方式禁用:

self.tableView.estimatedRowHeight = 0; 
self.tableView.estimatedSectionHeaderHeight = 0; 
self.tableView.estimatedSectionFooterHeight = 0;
3.scrollView

IOS11 之前,不想让scrollView偏移64px,设置automaticallyAdjustsScrollViewInsets=NO就可以了。IOS11以后就废弃了,使用scrollView的属性contentInsetAdjustmentBehavior来防止偏移。

UIScrollViewContentInsetAdjustmentAutomatic 
UIScrollViewContentInsetAdjustmentScrollableAxes 
UIScrollViewContentInsetAdjustmentNever 
UIScrollViewContentInsetAdjustmentAlways

这里我们直接选Never就可以了

if (@available(iOS 11, *)) {
    [UIScrollView appearance].contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}
4.Navigation Bar

navigation bar 的titleView支持了autolayout,需要titleView自己撑开或者重写了- intrinsicContentSize方法。intrinsicContentSize顾名思义,固定大小的意思,主要是解决一些模糊约束的问题。更多知识可以看这篇文章详解intrinsicContentSize。 不做适配在IOS11会遇到的问题: titleView对应的View大小和预期不一致。 titleView对应的View有点击事件会无法触发 解决方法是直接重写titleView对应View的intrinsicContentSize方法

 - (CGSize)intrinsicContentSize { return UILayoutFittingExpandedSize; }
5.对于大量页面需要设置 contentInsetAdjustmentBehavior属性 仅需在appdelegate 里边设置就可 全局适配
6.打包的时候

在打包项目的时候需要ios11之后需要多上传一个图标:1024*1024 直接在项目中上传就好

参考链接:
ios11适配指南
ios11适配遇到的坑

你可能感兴趣的:(ios 11适配相关)