UITabel在具有自动布局的UITableViewCell中具有错误的高度

Ste*_*ghe 22 uitableview ios autolayout

我有一个UITableView固定高度为100点的细胞.单元格在xib文件中创建,该文件使用3个约束将a固定UILabel到单元格的左,右和上边缘contentView.标签的垂直拥抱优先级设置为1000,因为我希望单元格的高度尽可能小.

当xib文件中单元格的宽度设置为320磅,与iPhone上的tableView宽度相同时,autolayout按预期工作.但是,当我将单元格的宽度设置为小于320点时,我得到了意想不到的结果.(我想在tableViews中使用具有不同宽度的相同单元格,例如在通用应用程序中)

例如:当我将宽度设置为224点并为标签提供一个占据该宽度的2行的文本时,标签的高度将增加以适应2行,但是当单元格调整为320点以适应一个tableView的宽度,文本只占1行,但标签的高度保持2行.

我在GitHub上放了一个示例项目来演示这个问题:https://github.com/bluecrowbar/CellLayout

有没有办法让UILabel总是调整大小以拥抱其文本内容?

Ste*_*ghe 68

在单元子类中添加它可以:

- (void)layoutSubviews
{
    [super layoutSubviews];
    [self.contentView layoutIfNeeded];
    self.myLabel.preferredMaxLayoutWidth = self.myLabel.frame.size.width;
}
Run Code Online (Sandbox Code Playgroud)

我在http://useyourloaf.com/blog/2014/02/14/table-view-cells-with-varying-row-heights.html上找到了这个.

更新1:这个答案适用于iOS 7.我发现自iOS 8以来,表格视图单元格中的自动布局非常不可靠,即使对于非常简单的布局也是如此.经过大量的实验,我(大部分)回去做手动布局和手动计算细胞的高度.

更新2:我已经在iOS 9上运行了一些测试,它似乎UITableViewAutomaticDimension终于像宣传的那样工作.好极了!


Tho*_*mon 15

愚蠢的错误!我在这个问题上已经失去了将近一天,最后我用Steven Vandewghe的解决方案解决了这个问题.

Swift版本:

override func layoutSubviews() {
    super.layoutSubviews()
    self.contentView.layoutIfNeeded()
    self.myLabel.preferredMaxLayoutWidth = self.myLabel.frame.size.width
}
Run Code Online (Sandbox Code Playgroud)

  • 同样在这里.我浪费了几个小时.但发现上面的工作.唯一的问题是为什么我们需要self.contentView.layoutIfNeeded()来获得正确的大小? (2认同)