使用动态高度

时间:2017-08-25 00:28:07

标签: ios swift uiscrollview interface-builder ios-autolayout

我正在尝试使用标签栏和导航栏在IB中布置我的详细信息屏幕。但是,模拟器运行时显示有三个问题:

  1. 屏幕顶部有一个间隙,
  2. 动态标签内容延伸到底部的容器视图
  3. 滚动条未到达内容的底部。

    Screenshot of simulator displaying the issues described
  4. 我的问题是我应该如何设置约束以解决上述问题?

    我有很多限制因素,我不确定我哪里出错了,或者最好的方式来介绍我到目前为止采取的步骤。但是here is a screenshot of my constraints这里是我到目前为止所采取的约束/步骤的摘要:

    1. 主视图只包含一个子项:滚动视图。滚动视图固定在顶部,主视图的尾部,尾部和底部固定在底部布局指南。顶部,

    2. 滚动视图只有1个子视图(“内容视图”)。内容视图固定在顶部+ 64,前导,尾随,底部到超级视图,并且它具有与主视图相等的高度和宽度。

    3. 内容视图包含图像,配方标题子视图和阴影背景子视图。阴影背景子视图包含另一个子视图,其中包含一些动态高度标签。我有限制将这些容器的前端和尾端固定到superview。我有顶部,底部,前导,尾随约束将这些子视图固定到superview和/或彼此之间,以便从上到下有一个链。

    4. 阴影背景视图包含动态高度标签。标签还有顶部,前部,尾部和底部的引脚约束,但最后一个没有底部约束的标签除外。

    5. 我没有任何更新布局的代码 - 到目前为止所有内容都在IB中。

      非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

使内容视图的顶部约束的常量为0,而不是64.对于超出容器视图底部的标签,您必须发布有关布局的更多信息,以便我们提供帮助。

答案 1 :(得分:0)

哈利路亚!在度过了令人沮丧的一周之后,我终于在IB中找到了一个神奇的公式,用于布置滚动视图+导航栏+标签栏+动态标签高度。

我原来的问题是由以下错误引起的:

  • 调整滚动视图Insets应设置为false
  • 内容视图顶部和底部引脚不正确
  • 在某些子视图中缺少某些高度
  • 最后一个子视图未在底部正确固定

也许不是所有这些步骤都是必需的,也许这不是最完美的解决方案,但这对我有用。 Here is a diagram of the solution for those that prefer pictures.

  1. 主视图 - >属性检查器 - >取消选中“调整滚动视图插入”复选框。
  2. 添加滚动视图。这是主视图中唯一的子项。主视图的顶部,前导,尾随空间。将底部固定到底部布局指南。
  3. 添加一个子视图(将其命名为“内容视图”)。这是Scroll View的唯一子项。引脚顶部,前导,尾随空间滚动视图。 Pin Bottom to Scroll视图的常量为-49,以考虑标签栏。同时将其高度和宽度设置为等于主视图。
  4. 将子视图添加到内容视图。 Top被固定在Superview上,常数为62,用于Nav Bar。领先和尾随被固定在Superview上。视图还需要一个高度 - 如果它是动态内容,则给它一个固定值或最小值(例如:高度> - 20)。您可能还需要为高度限制设置较低的优先级,例如250.
  5. 根据需要继续添加同级子视图。将顶部固定到上一个兄弟子视图。将领先和尾随引入Superview。最后一个兄弟子视图应固定在Superview上。每个子视图都需要一个高度。从顶部子视图到底部需要一个连续的约束链(顶部和底部引脚,高度),以避免“滚动视图具有模糊的可滚动内容高度”警告并使滚动正常工作。
  6. 做一个快乐的舞蹈。
  7. 希望这有助于其他人。