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

Posted

技术标签:

【中文标题】界面生成器中的自动布局高度 >= 0 帧【英文标题】:Autolayout Height >= 0 Frame in Interface Builder 【发布时间】:2016-01-24 23:28:28 【问题描述】:

我正在使用界面生成器来设置带有两个标签的表格视图单元格。其中之一应该具有动态高度,具体取决于它包含多少文本。 (该单元格也是基于该标签的高度的动态高度。)我的约束正常工作 - 标签和单元格都根据输入文本正确调整大小。我的问题是,为了使它工作,我必须对高度> = 0的调整大小标签设置一个约束。出于某种原因,IB迫使我将标签的屏幕高度设置为0,这使得它很难看到/一起工作。 “标签”下方的小点是0高度标签:

如果我将其设置为大于 0 的高度(这应该是约束允许的),则约束会错误地变为红色:

我很好奇为什么 IB 不允许我在大于最小值的高度上设置具有 >= 约束的东西。有没有办法摆脱这个错误?

【问题讨论】:

【参考方案1】:

在处理标签文本时,您不需要将高度指定给UILabel。因为它会根据字体大小自动获取高度。您需要做的就是为两个标签提供垂直、顶部和底部约束,并从属性检查器中删除默认文本。现在您可以创建具有动态高度的表格单元格了。

顶部标签约束: 领先、尾随、顶部

底部标签约束: 领先,尾随,底部 并给出顶部和底部标签之间的垂直间距。

通过自调整单元格高度,您可以获得所需的结果。

参考网址:self-sizing-cells.

这是我设置的约束图像:

这是两个标签的约束图像。

以及我添加的用于显示数据和结果的示例代码。

希望它有助于解决您的问题。

【讨论】:

您似乎遇到了我试图避免的问题(您的第二个标签在 IB 中似乎是 0 高度 @MattCooper 我的第二个标签的高度为 0,因为第二个标签没有内容,所以它的高度将自动变为 0。使用标签时,您不需要高度限制。由于标签的高度会根据您传入的字符串自动增加或减少。所以我的意思是你给标签的高度限制不是必需的。 当我不给标签高度限制时,我得到“标签的高度不明确”(顶部标签)和“标签2的高度和垂直位置不明确”(下部标签)。您如何避免这些错误? @MattCooper 如果你得到这个这意味着现在你已经删除了标签文本并且它的高度已经变成了 0px。所以现在的问题是垂直间距。您必须做的是更改单元格的高度,这应该是垂直约束的总和。例如:TopLabel = 10,VerticalSpace = 10,BottomLabel = 10,TopLabelHeight = 10 或 0,BottomLabelHeight = 10 或 0。所以故事板中单元格的高度应该是(TopLabel +TopLabelHeight +VerticalSpace +BottomLabelHeight + BottomLabel)。跨度> 在第一种情况下,两个标签高度均为 10,因此单元格的高度将为 50,目前在您的情况下不起作用。在第二种情况下,两个标签高度均为 0,因此单元格的高度将为 30,目前在您的情况下不起作用。 PL。检查我所做的最后一张图片,以便在运行时根据标签文本自动更改单元格的高度。如果您仍然遇到问题,请告诉我。

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

代码中设置的自动布局约束未出现在界面生成器中

界面生成器中的自动布局

自动布局混合代码和界面生成器

iOS 10 中的自动布局增加高度并使 Y 位置为负

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

iOS 自动布局:这可以用 IB 完成吗?