You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS 11 iPhoneX下移除UIScrollView的safeAreaInsets方法及相关问题咨询

解决UIScrollView在iOS 11+与iPhone X下的Safe Area Insets问题

嘿,我来帮你搞定这两个困扰你的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:41:44