如何将 UIScrollView 内容始终放置在 SafeArea 下方,即使内容高度小于 ScrollView 高度?

How to place UIScrollView content always below SafeArea, even if content height smaller than ScrollView height?

提问人:Andrei Herford 提问时间:11/6/2023 更新时间:11/7/2023 访问量:21

问:

TL;DR 根据 Apple 文档仅当垂直内容大小大于滚动视图本身的高度时,才会影响内容插图。UIScrollView.ContentInsetAdjustmentBehavior

因此,当内容大小小于滚动视图高度时,内容插图不适应安全区域。

是否可以避免将内容始终置于安全区域下方?

详:

A 仅包含一个作为直接子视图,该子视图对屏幕边缘(superview,NOT 安全区域)的所有约束为 0。因此,延伸到上部安全区域以下。UIViewControllerUIScrollViewUIScrollView

包含三个 .根据语言的不同,标签的行数和高度可能会有所不同。第一个标签以 0 顶部约束放置在 ScrollView 的 Content Layout Guide。第二个标签的顶部和底部为 0,约束第一个和第三个标签。第三个标签对内容布局指南的底部约束为 0。没什么特别的。UIScrollViewUILabels

根据文本/语言和/或设备的不同,标签可能会超过或不会超过 ScrollView 的高度。如果组合的标签高度/内容高度大于 ScrollView 的高度,则一切按预期工作,并且第一个标签会自动放置在顶部安全区域下方。

但是,当标签/内容高度小于 ScrollView 高度(无需滚动)时,第一个标签将放置在屏幕顶部边缘,因此其内容被状态栏的内容覆盖。

我不明白为什么只有当内容大小大于 scrollView hight 时才应用自动内容插图适应。这种行为背后的原因是什么?

最重要的是:如何避免这种情况,并将内容始终放在安全区域以下?

iOS UIscrollView SafeAreaLayoutGuide

评论


答:

0赞 DonMag 11/7/2023 #1

滚动视图可以是:.ContentInsetAdjustmentBehavior

  • automatic
  • always
  • scrollableAxes
  • never

如果要“始终将内容置于安全区域下方”,请使用.always

至于为什么会有不同行为的选项?好吧,我猜它为可以利用它们的设计提供选项。