在UIScrollView中设置视图的内容大小

在UIScrollView中设置视图的内容大小

问题描述:

我必须在视图控制器中放置几个​​视图,运行时应该看起来像这样。在UIScrollView中设置视图的内容大小

enter image description here

最初白色视图应该部分地覆盖在底部的蓝色视图等中示出的图像中蓝色视图应该保持放置,而底部的白色视图可以在蓝色视图上滚动。

我将蓝色视图添加到视图控制器的主UIView。然后在蓝色视图顶部添加一个UIScrollView,并将白色视图添加到滚动视图。

现在我收到了可怕的ambigeous内容大小错误。我已经固定了所有四面的滚动视图。然后在白色视图中添加前导,底部和尾部约束。然后我尝试在白色视图中添加顶部约束,但错误仍然存​​在。我也为白色视图添加高度约束无济于事。

可能很难想象我的设置,因此我还添加了演示项目here

我为您设置了约束here

说明: 由于您的scrollView不知道其内容(白色视图)的宽度和高度,因此您将获得模糊的内容大小。

我将顶部,宽度和高度约束添加到白色视图。这样你的scrollView知道它的内容宽度,并且只会垂直滚动。至于内容高度 - 你可以在代码中更改heightContstrait的常量,或者如果对白色视图的子视图正确使用自动布局,则可以完全删除高度限制。

+0

谢谢。这确实有效。不过,我将设置顶部约束设置为白色视图时遇到了一个小问题。因为我已经使蓝色视图的高度动态化了。它需要6/10的主要观点。所以它会在每个屏幕尺寸上看起来成比例。但是,一旦我将白色视图的顶部约束设置为超级视图,无论蓝色视图的高度如何变化,白色视图都保持不变。有没有办法动态改变白色视图的顶部约束? – Isuru

+0

你可以尝试连接topConstraint到插座,然后在代码中(viewDidLayoutSubviews)将其常量设置为例如蓝色视图高度的一定比例:topConstraint.constant = 0.75 * 6 * view.frame.size.height/10;或者直接使用blueView的插座:topConstraint.constant = 0.75 * blueView.frame.size.height –

+0

明白了。谢谢 – Isuru

将滚动视图下的蓝色视图。并设置scrollviews内容插入,使您的白色视图不显示在顶部,但有一定的空间。现在开始时,您会看到蓝色的白色视图,并在滚动时覆盖蓝色视图。关于大小错误,scrollview最初需要知道它的内容大小。我假设你的白色视图是表格视图,因此将其底部约束设置为零。如果你想让蓝色大小在滚动时改变它的大小,比如它的头像或其他东西,那就有点不同了。您应该在uiscrolldelegate上滚动事件,并相应地更改蓝色视图高度