UIScrollView内容尺寸接近屏幕时触摸触发跳转问题求助
问题根因
这个异常是iOS 11及以上版本中UIScrollView默认的contentInsetAdjustmentBehavior属性和当前约束配置冲突导致的临界值计算错误:
你当前将UIScrollView的四边直接约束到父视图,系统会默认自动根据安全区域调整ScrollView的contentInset,当内容宽度刚好落在「安全区域宽度 < 内容宽度 < 屏幕宽度」的临界区间时,系统对可滚动偏移量的计算会出现偏差,触摸事件触发偏移校正时就会直接跳转到内容最大偏移位置,和你测试的现象完全吻合。
修复步骤
- 调整ScrollView约束的参考对象
如果需要ScrollView铺满全屏(覆盖安全区域外的上下/左右边距),需要将ScrollView的leading、trailing、top、bottom四个约束的参考项设置为父视图的普通边,而非安全区域边,四个约束的常量统一设为0。 - 关闭自动contentInset调整
- 代码实现:在ViewController的生命周期方法中添加
scrollView.contentInsetAdjustmentBehavior = .never - IB实现:在Storyboard/XIB的ScrollView属性面板中,找到「Content Inset Adjustment Behavior」选项,选择「Never」
- 确认内部视图约束正确性
你当前给ContentView添加的和顶层视图等宽等高的低优先级(250)约束配置是正确的,只需额外确认BlueView的宽高约束已正确设置,ContentView的尺寸完全由内部子视图撑开,不存在多余的宽高约束冲突即可。
内容的提问来源于stack exchange,提问作者viedev
相关产品推荐
相关产品推荐

