滚动后UILabel不尊重约束(xib中的标签,被称为uitableviewcell)

时间:2015-03-17 21:14:33

标签: ios xcode uitableview interface-builder autolayout

这是我在iOS开发中遇到的最疯狂的问题。基本上我有一个xib文件: xib file

此xib文件在UITableView中作为一行加载。在这个xib文件中,我有一个UILabel(“Textodocomentário”),这是一个多线uilabel,并将根据其内容进行扩展。为此,我添加了以下约束和内容拥抱:

constraints

当我运行并用大文本替换内容时,所有这些实际上都能正常工作。这就是它的样子:

working fine

好的,现在它开始了奇怪的事情,如果我向上滚动到另一个单元格(使用相同的xib文件),文本视图以不遵守我的约束的方式扩展其宽度和高度:

upper cell is weird

现在,如果我回滚到之前工作正常的单元格,它有同样的问题,uilabel的宽度和高度不再符合我的约束条件了:

cell that was working fine, now is not

我试图检查实际发生的约束,如果由于某种原因被忽略,这就是我发现的。我的uilabel具有正确大小的约束和uilabel中具有错误大小的约束都是相同的。

fine uilabel constraints wrong uilabel constraints

我真的开始认为这是一个iOS错误。提前感谢您的帮助

3 个答案:

答案 0 :(得分:1)

尝试后,至少一切。我找到的修复是使用UITextView而不是UILabel。这个修复使我确信这是一个UILabel错误。

答案 1 :(得分:0)

我想说你遇到的问题是你更改了Content Hugging PriorityContent Compression Resistance Priority值,这会使UILabel没有像你期望的那样调整大小。

您可以尝试将值重置为默认值,如果其他约束条件正确,则应正确计算标签和单元格的高度。

enter image description here

可能UITextView有效,因为您没有更改这些属性的默认值。

希望这有帮助。

答案 2 :(得分:0)

这看起来像我之前在表视图中遇到的自调整单元格中遇到的另一个错误。最初,我通过显式设置我的单元格标签的preferredMaxLayoutWidth来解决这个问题,但后来发现在-tableView:cellForRowAtIndexPath中向我的单元格发送-updateConstraintsIfNeeded消息也解决了这个问题,而无需设置preferredMaxLayoutWidth。

希望这有帮助。