【问题标题】:Setting the content size of a view inside UIScrollView在 UIScrollView 中设置视图的内容大小
【发布时间】:2018-05-09 09:26:27
【问题描述】:

我必须在视图控制器中布置一些视图,这些视图在运行时应该是这样的。

最初,白色视图应部分覆盖底部的蓝色视图,如图所示。蓝色视图应保持不变,而底部的白色视图可以滚动到蓝色视图上。

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

现在我遇到了可怕的模棱两可的内容大小错误。我已将滚动视图固定在所有四个方面。然后将前导、底部和尾随约束添加到白色视图。然后我尝试向白色视图添加顶部约束,但错误仍然存​​在。我还向白色视图添加了高度约束,但无济于事。

可能很难想象我的设置,所以我也添加了一个演示项目here

【问题讨论】:

    标签: ios uiview uiscrollview autolayout


    【解决方案1】:

    我为你设置了约束here

    说明: 您的内容大小不明确,因为您的 scrollView 不知道其内容(白色视图)的宽度和高度。

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

    【讨论】:

    • 谢谢。这确实有效。但是,我在将顶部约束设置为白色视图时遇到了一个小问题。因为我已经使蓝色视图的高度动态化了。它占主视图的 6/10。所以它在每个屏幕尺寸上看起来都是成比例的。但是一旦我将白色视图的顶部约束设置为超级视图,无论蓝色视图的高度如何变化,白色视图都会保持不变。有没有办法动态改变白色视图的顶部约束?
    • 您可以尝试将 topConstraint 连接到插座,然后在代码中(在 viewDidLayoutSubviews 中)将其常量设置为例如蓝色视图高度的某个比例:topConstraint.constant = 0.75 * 6 * view.frame.size .高度/10;或者如果你直接有blueView的出口:topConstraint.constant = 0.75 * blueView.frame.size.height
    • 知道了。谢谢??
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      确保您已阅读(并理解)Apple TN2154:“UIScrollView And Autolayout”,其中解释了所需的步骤。

      看起来您没有正确指定内容大小。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-07
        • 1970-01-01
        • 1970-01-01
        • 2011-11-11
        • 1970-01-01
        • 2012-05-18
        • 2016-01-06
        相关资源
        最近更新 更多