项目开发了三分之一,才想到在 iPhone X 上去跑一跑,一跑吓一跳,各种 UI 上的布局错误。本着尽快将问题消灭在萌芽阶段,于是接下去决定使用 iPhone X 作为默认模拟器去开发。本篇介绍修复一则非常常见的,即 UIScrollView 的 ContentInset 不对的问题。
问题是这样的
App 在 iPhone X 上模拟器打开,中间空了一大块(不重要的部分已经打码),这是怎么回事?仔细一看,我中间的 UICollectionView(即 UIScrollView)的 ContentInset 不对了,中间空着一大块。
奇怪了,虽然我已经关掉了 UIViewController 的automaticallyAdjustsScrollViewInsets了,为什么它还是被调整了呢?
新增 UIScrollViewContentInsetAdjustmentBehavior
原来,在 iOS 11 上,UIViewController 的automaticallyAdjustsScrollViewInsets已经 deprecated 了。UIScrollView 自动调整ContentInset的行为接下去是自己管理了,而不是让 UIViewController 来管理了。
从 iOS 11 开始,我们可以通过将 UIScrollView 的contentInsetAdjustmentBehavior这个新增UIScrollViewContentInsetAdjustmentBehavior属性,设置成.never,来关掉对它的自动调整。当然了,这个值默认是.automatic,也就是会根据 NavigationBar 和 TabBar 来自动调整。
于是乎,我们的项目多了一句这样的代码(除非你的项目是 iOS 11 Only 的,你可以不用这么写):
if #available(iOS 11.0, *) { self.collectionView.contentInsetAdjustmentBehavior = .never }
更好的 Storyboard 方式
如果你的项目用了较多的地方需要去针对 iOS 11 设置这个属性,你会发现到处是 available 判断真是太糟心了,能不能有方便的方式?
当然有。如果你用 Storyboard 的话,直接给 UIScrollView 的那个属性,设置 Never 就好了,不用写 iOS 版本判断,只要保证 Storyboard 的最小 iOS 部署目标正确即可。
小结
不得不说 iPhone X 是至今为止对 iOS App 的排版布局破坏性最大的一个版本,接下去我应该还会分享好几篇相关适配文章。
本站架设于Linode 东京机房
由 udpwork.com 聚合
|
评论: 0
|
要! 要! 即刻! Now!