界面生成器问题中的 UIScollView 和自动布局

Posted

技术标签:

【中文标题】界面生成器问题中的 UIScollView 和自动布局【英文标题】:UIScollView and auto layout in Interface builder issue 【发布时间】:2014-08-28 19:43:30 【问题描述】:

在到处阅读大量信息并尝试成功但没有结果后,我决定就该主题编写新问题。

任务看起来微不足道。我有滚动视图。它有一个 UIView 类型的子视图(我们称之为 ContentView)。反过来,内容视图有 2 个 UIView 类型的子视图(我们称之为 ViewA 和 ViewB)。

-ScrollView
    -ContentView
        -ViewA
        -ViewB

ScrollView 有 4 个约束,将其绑定到 superview 的所有边缘。 ViewA 有 3 个约束(对 ContentView) - 顶部、左侧和右侧。 ViewB 有 4 个约束(对 ContentView) - 底部、左侧、右侧和高度。 ViewA 的底部和 ViewB 的顶部之间还有另一个约束。我的想法是我会在运行时更改 ContentView 的框架,ViewA 和 ViewB 将相应地自动调整大小和布局。

好吧,它不起作用。我尝试将不同的约束从 ContentView 放到 ScrollView,尝试不使用它们。得到不同的结果,但没有一个是正确的。例如,ContentView 对 ScrollView 有 4 个约束(上、下、左和右)。我在运行时设置 ContentView 的框架。但是,它会被重置,最终,ContentView 框架基本上具有 ViewB 的高度(具有高度限制)。

非常感谢您的帮助。

【问题讨论】:

【参考方案1】:
    不要设置内容视图的框架。 您需要向 viewA 添加一个约束,以定义其高度。

【讨论】:

我不是这样添加的吗? ViewA 的高度应根据 ContentView 大小自动计算,并考虑 ViewB 的固定高度。否则,我不明白这个例子中约束的目的。对我来说,他们应该在运行时调整视图的大小。否则,我可以简单地明确设置所有框架。内部视图也有宽度。按照你的话,我也得设置一下。但我的想法是,我将在运行时(ContentView)设置一帧,其中的所有内容都将相应地进行布局 使用带有滚动视图的自动布局绝对不直观,我建议阅读 Apple 关于该主题的技术说明:developer.apple.com/library/ios/technotes/tn2154/_index.html 阅读“纯自动布局方法”部分。如果您这样做,您将能够拥有动态布局。要记住的关键是,scrollView 内的每个视图都需要具有定义其宽度/高度的显式约束或具有固有大小(如 UILabel)。 已经读过很多遍了。试图理解它。最终,我想在 IB 中设置所有内容不是一种选择。

以上是关于界面生成器问题中的 UIScollView 和自动布局的主要内容,如果未能解决你的问题,请参考以下文章

界面生成器中的自动调整大小问题

UIScollView

界面生成器中的自动布局高度 >= 0 帧

UIScollView

界面生成器中的自动布局

UIScollView的总结