我正在使用 AutoLayout 实现我的 tableview 单元格来显示图像和 2 个标签,使用动态类型来自适应字体大小。
我实现了estimatedHeightForRowAtIndexPath,它非常有意义并且易于使用。
我不为单元格使用界面构建器。相反,我使用 Masonry,这不应该有任何区别。
我目前正在努力计算实际的单元格高度。更新自动布局代码时,手动计算是一件痛苦且难以维护的事情。
我找到了这个 StackOverFlow 答案:Using Auto Layout in UITableView for dynamic cell layouts & variable row heights 这个解决方案还应该处理不同的字体大小,但对我不起作用。
当我有这样的 AutoLayout 系统时: UILabel to top contentView with padding,另一个 UILabel to bottom of contentView with padding,它应该自动计算单元格高度。
但相反,它会导致以下 AutoLayout 冲突:
UIView property translatesAutoresizingMaskIntoConstraints)
(
"<MASLayoutConstraint:0xc506be0 UIImageView:0xc5070a0.height == 150>",
"<MASLayoutConstraint:0xc506d90 UIImageView:0xc5070a0.top == UITableViewCellContentView:0xc5076e0.top + 10>",
"<MASLayoutConstraint:0xc506990 UILabel:0xc507450.top == UIImageView:0xc5070a0.bottom + 10>",
"<MASLayoutConstraint:0xc506630 UILabel:0xc507260.top == UILabel:0xc507450.bottom>",
"<MASLayoutConstraint:0xc506530 UILabel:0xc507260.bottom == UITableViewCellContentView:0xc5076e0.bottom>",
"<NSAutoresizingMaskLayoutConstraint:0xc3d05a0 UITableViewCellContentView:0xc5076e0.height == 44>"
)
我使用以下自动布局代码:
[self.subtitleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.titleLabel.mas_bottom);
make.right.equalTo(self.contentView.mas_right).with.offset(-GCBaconCellRowPadding);
make.left.equalTo(self.contentView.mas_left).with.offset(GCBaconCellRowPadding);
make.bottom.equalTo(self.contentView.mas_bottom);
}];
最后一行应指示单元格的高度自行扩展。
查看 AutoLayout 冲突的输出,它似乎想将高度自动设置为 44.0,这是默认值。
编辑:将 contentView 的 translatesAutoresizingMaskIntoConstraints 设置为 NO
self.contentView.translatesAutoresizingMaskIntoConstraints = NO;
创建单元格时会修复碰撞,但会导致行高为零。