首页 > 解决方案 > UIScrollView 是否会自动调整 contentOffset 以适应安全区域?

问题描述

我添加了一个 UIScrollView 和 3 个 UIView。

我已经三次检查了 UIScrollView 的框架、UIViews 的框架、它的 contentOffset、superview 的框架,通常所有相关的内容。

出于某种原因,这就是我将 contentOffset 设置为 (0,0) 时出现的情况:

在此处输入图像描述

我的项目中没有从该偏移原点开始的视图。

scrollView 假设 (0, 0) 大约是 (0, 50) ,这是导航栏的高度,即使我没有使用导航栏。

编辑

奇怪的是,如果我在设备处于横向模式时打开应用程序,contentOffset 行为正常。因此,由于设备的下巴,它必须进行一些自动调整。

编辑 2

我在没有下巴的设备(iPhone 8)上打开了应用程序,然后 contentOffset 会自动调整到状态栏的高度。含义 (0, 0) 不是 (0, 0) 而是 (0, heightOfStatusBar)。

编辑 3

在 iPad 上,即使 iPad 确实有状态栏,它也会正常运行!

在每种情况下,如何将其修复为 (0,0) ?

标签: iosobjective-cuiviewuiscrollview

解决方案


UIScrollView具有“插入”内容的属性,因此安全区域不会重叠。

可以通过设置实例的contentInsetAdjustmentBehavior属性来更改它,如下所示:UIScrollView

scrollView.contentInsetAdjustmentBehavior = .never

请注意,它不是contentOffset,而是contentInset经过调整的。(0, 0)这就是为什么在所有情况下内容偏移量仍然存在的原因。

此外,如果您正在为低于 iOS 11.0 的 iOS 开发目标进行构建,您可能会收到构建错误。在这种情况下,您可以改用以下代码。

if #available(iOS 11.0, *){
    scrollView.contentInsetAdjustmentBehavior = .never
}

参考

Apple 开发者文档 - contentinsetadjustmentbehavior


推荐阅读