iOS 滚动视图允许滚动过去的内容

Posted

技术标签:

【中文标题】iOS 滚动视图允许滚动过去的内容【英文标题】:iOS Scroll View Allows Scrolling Past Content 【发布时间】:2017-10-05 17:26:27 【问题描述】:

我正在努力针对横向和小屏幕优化我的应用。我主要使用滚动视图来实现这一点。在我的一个观点中,我有一个容器视图。当我在故事板中的设备之间切换时,这个容器视图看起来很完美。容器视图被映射到一个视图控制器,该控制器具有一个滚动视图,其顶部、底部、前导和尾随空间设置为超级视图 0。因此它应该填充容器。实际的视图控制器设置为 Freeform Simulated Size,宽度为 263,高度为 190(滚动视图内内容的确切大小)。

在滚动视图内部,我只有显示信息的标签。

这一切似乎都很好。在较小的设备或横向上,您可以滚动查看内容并查看所有标签。

唯一的问题是在所有设备和屏幕尺寸上,您都可以滚动浏览内容。在 X 和 Y 轴上。奇怪的是在水平轴上容器视图的宽度专门设置为 263。我使用滚动视图的唯一原因是高度。即使在较小的屏幕上,宽度也没有问题。但它仍然允许用户水平滚动。

对于 iPhone 4s 横向更具体的示例,容器视图的宽度为 263,高度为 90。但它自己的内容是263宽和190高。所以我希望用户能够向下滚动以查看剩下的 100 条内容。但目前它也允许用户横向滚动,并在向下滚动时滚动到内容的末尾。

如何解决此问题,使用户无法滚动浏览内容?

如果您需要任何其他详细信息或信息,请告诉我。解释故事板细节有时会有点棘手,因此我很乐意提供任何其他细节以使其更清晰。

【问题讨论】:

【参考方案1】:

就像您的其他问题的答案一样,关键是要了解滚动视图的内容决定了可滚动区域。

假设您将“TopLabel”约束设置为Leading: 0 和Top: 0。标签将位于内容的左上角,并将定义滚动视图的内容框架。

现在将“BottomLabel”放在右下方,并将约束设置为 Trailing: 0 和 Bottom: 0。

此时,自动布局不知道将“BottomLabel”的顶部和左侧部分放在哪里,因为可滚动区域没有完全定义。

因此,如果您为Leading: 60 和Top: 400 的“BottomLabel”添加约束,“BottomLabel”的左上角将被放置在60,400 并且可滚动区域 - 滚动视图的 contentSize - 将是 @987654321 @x400 + height of BottomLabel

为避免滚动超过您想查看的最后一个视图/图像/标签,您需要确保 元素的约束控制滚动视图内容的宽度和高度。

【讨论】:

以上是关于iOS 滚动视图允许滚动过去的内容的主要内容,如果未能解决你的问题,请参考以下文章

带有动态内容的滚动视图的 iOS UITableViewCell

iOS:如何将内容从滚动视图复制到另一个滚动视图

如何在 iOS 上制作垂直滚动视图?

如何实现(几乎)全视图 uitableview 可以滚动过去最后一个单元格并在 iOS 中显示更多元素

如何在 ios 中使用自动布局更改滚动视图内容大小

允许 UIScrollView 滚动过去的内容而不弹跳