小编典典

如何使用 Autolayout 在我的 UIScrollview 上设置约束?

all

我花了两天时间尝试混合和纯自动布局方法的各种解决方案,以实现在自动布局之前微不足道的滚动视图设置,现在它是官方的
- 我一定太愚蠢了。我主要在 Storyboard 中进行设置(嗯,就是这样)。

所以这是我的求助请求。

视图树:

UIView
-UIView
-UIView
..-UIScrollview
...-UIButton
...-UIButton
...-UIButton

按钮应该水平滚动(从左到右,反之亦然)。有人可以 我知道如何设置约束以使用纯自动布局实现这一目标吗???

--

我尝试了混合方法,如下所示:

UIView
- UIView
- UIView
..-UIScrollview
...-UIView (contentview)
....-UIButton
....-UIButton
....-UIButton

…并根据 Apple 的
TechNote为contentview和设置设置固定的宽度和高度约束。translatesAutoresizingMaskIntoConstraints按钮和滚动视图是使用约束设置的。这让滚动视图滚动(耶),但是,它滚动得太远了!据我所知,滚动宽度比我设置的内容视图翻了一番???!!!???

我也尝试了纯自动布局方法,无论contentview有无。 所有
的意见都是translatesAutoresizingMaskIntoConstraints=NO,除了self.view。按钮具有固定的宽度/高度约束,并固定到滚动视图的所有四个边缘。没有滚动。

所以我完全困惑为什么我不能让它正常工作。非常感谢任何帮助,如果您需要任何其他信息,请询问!

带有解决方案的更新屏幕截图 - buttonZ 约束:

在此处输入图像描述

编辑@ Jamie Forrest 所以解决方案原来是最后一个按钮上的错误尾随约束。我设置的值不是
6441,而是负数,-6441。棘手的是,在情节提要中设置值时,Pin 工具栏中有两个选项:

在此处输入图像描述

当前画布值是负数(导致不滚动),下面的选项是正数(激活滚动)。这意味着我并不愚蠢,但我猜至少是半盲的。 虽然,为了我的辩护,XCode
没有显示“不正确”设置的错误,这不是有点令人不安吗?

再次编辑 现在这很有趣......将尾随值从 -6441(无滚动)更改为 6441
启用滚动。但是我的老朋友“太多内容大小”又回来了,导致内容大小是应有大小的两倍!获得正确内容滚动的解决方案是将尾随约束设置为零!这在 Storyboard
中工作时并不明显,但在查看 @Infinity James 的代码时,它应该是这样的。


阅读 61

收藏
2022-08-16

共1个答案

小编典典

当您将它们粘贴到此处时,很难看到您的约束的确切值和设置,所以我不确定从您的屏幕截图中哪里出错。

代替解释您的设置有什么问题,我创建了一个基本示例项目,该项目具有与您描述的非常相似的视图层次结构和约束设置。示例项目中的水平滚动按预期工作,该项目使用
Apple 在Technical
Note
中描述的“Pure
AutoLayout”方法。

最初让 Auto Layout 与UIScrollView.
让它工作的关键是确保滚动视图中的所有项目加在一起,具有最终链接到滚动视图所有方面的约束,并有助于 AutoLayout 系统能够确定 contentSize
为滚动视图将大于其框架。看起来你试图在你的代码中这样做,但也许你有一些多余的约束使 contentSize 太小。

另外值得注意的是,正如其他人提到的,使用 AutoLayout 和 UIScrollview,您不再显式设置 contentSize。AutoLayout
System 根据您的约束计算 contentSize。

2022-08-16