iOS 11 iPhoneX下移除UIScrollView的safeAreaInsets方法及相关问题咨询
嘿,我来帮你搞定这两个困扰你的UIScrollView问题!
1. 如何在iOS 11、iPhone X环境下移除UIScrollView的safeAreaInsets?
iOS 11之后,UIScrollView新增了自动适配Safe Area的默认行为,会根据屏幕安全区域自动调整contentInset和scrollIndicatorInsets。要移除这个效果,最直接的是修改它的专属属性:
代码实现方式
- Swift:
scrollView.contentInsetAdjustmentBehavior = .never
- Objective-C:
scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
Storyboard/XIB可视化实现
选中你的UIScrollView,打开右侧属性检查器,找到「Content Inset Adjustment Behavior」选项,选择「Never」即可。
额外提醒:如果你的ScrollView是通过Auto Layout约束到父视图的**边缘(edges)**而非Safe Area,结合上面的设置就能完全消除Safe Area带来的Insets。
2. 水平分页ScrollView在iPhone X横屏出现左右Insets,是系统Bug还是未掌握官方方法?
这绝对不是系统Bug!这是iOS 11+给UIScrollView默认加上的Safe Area适配逻辑——像iPhone X这类带刘海、圆角的全屏设备,横屏时系统会自动给ScrollView左右添加Safe Area Insets,避免内容被圆角或传感器遮挡。
解决这个问题的官方标准方法就是我上面提到的:把contentInsetAdjustmentBehavior设为.never。这样ScrollView就会完全忽略Safe Area,严格按照你设置的H:|-0-[ScrollView]-0-|约束填充父视图,横屏时也不会出现额外的左右Insets了。
如果需要更精细的控制,也可以手动覆盖Insets:
scrollView.contentInset = UIEdgeInsets.zero scrollView.scrollIndicatorInsets = UIEdgeInsets.zero
不过更推荐用contentInsetAdjustmentBehavior,这是Apple官方提供的标准化方案,能更好适配不同场景和后续系统版本。
内容的提问来源于stack exchange,提问作者AamirR

