【发布时间】:2013-12-11 22:43:35
【问题描述】:
我花了两天时间尝试了Mixed and Pure Autolayout approaches 的各种解决方案,以实现在自动布局之前简单的滚动视图设置,现在它是官方的 - 我一定是太愚蠢了。我主要在 Storyboard 中进行设置(嗯,就是这样)。
所以这是我的求助请求。
视图树:
UIView
-UIView
-UIView
..-UIScrollview
...-UIButton
...-UIButton
...-UIButton
按钮应该水平滚动(从左到右,反之亦然)。有人可以请让我知道如何设置约束以使用纯自动布局来实现这一目标???
--
我尝试过混合方法,如下所示:
UIView
- UIView
- UIView
..-UIScrollview
...-UIView (contentview)
....-UIButton
....-UIButton
....-UIButton
...并根据 Apple 的技术说明为 contentview 和 translatesAutoresizingMaskIntoConstraints 设置设置固定的宽度和高度限制。按钮和滚动视图是使用约束设置的。这让滚动视图滚动(耶),但是,它滚动得太远了!据我所知,滚动宽度比我设置的内容视图翻了一番???!!!???
我也尝试了纯自动布局方法,有contentview 和没有。 所有视图均为translatesAutoresizingMaskIntoConstraints=NO,self.view 除外。按钮具有固定的宽度/高度约束,并固定到滚动视图的所有四个边缘。没有滚动。
所以我完全困惑为什么我不能让它正常工作。非常感谢任何帮助,如果您需要任何其他信息,请询问!
更新的屏幕截图和解决方案 - buttonZ 约束:
编辑@杰米福雷斯特 所以解决方案原来是最后一个按钮上的错误尾随约束。我设置的值不是 6441,而是负数,-6441。棘手的是,在 Storyboard 中设置值时,Pin 工具栏中有两个选项:
当前画布值为负(导致不滚动),下面的选项为正(激活滚动)。这意味着我并不愚蠢,但我猜至少是半盲的。 虽然,在我看来,XCode 没有显示“不正确”设置的错误,这不是有点令人不安吗?
再次编辑 现在这很有趣......将尾随值从 -6441(无滚动)更改为 6441 启用滚动。但是我的老朋友“太多内容大小”又回来了,导致内容大小是应有大小的两倍!获得正确内容滚动的解决方案是将尾随约束设置为零!这在 Storyboard 中工作时并不明显,但在查看 @Infinity James 的代码时,它应该是这样的。
【问题讨论】:
-
您在哪里计算/设置滚动视图的内容大小?提到您第一次尝试使用 contentView 时,您说它滚动得太远了。
-
据我所知,您不能仅使用自动布局设置
UIScrollView的contentSize。contentSize定义了您可以滚动多少。所以你最终必须在某个地方手动设置它。其余的,您可以使用布局约束来设置彼此相对的视图框架。 -
@Jeff,内容大小是固定的,永远不会改变。我通过手动为 contentiview 输入正确的高度和宽度来设置情节提要中的内容大小,并在情节提要中使用约束固定高度和宽度。
-
在运行时打印出你的 contentSize,看看它是否与你输入的值匹配。 contentSize 决定发生多少滚动,因此您第一次尝试的问题与 contentSize 有关。
-
@Guillaume,所以“纯粹的自动布局”方法毕竟不是那么纯粹吗?但是如何手动设置 contentSize?正如我上面提到的,我将内容视图的高度/宽度设置为固定值(在情节提要中)。但它滚动得太远(2x)。
标签: ios uiscrollview storyboard autolayout