有很多关于如何使用Autolayout和TextView制作动态单元格高度的问题。这是故事
我遵循这篇文章iOS dynamic table view cells with varying row height and Autolayout。在这种情况下,我们使用TextView替换文章中的第二个标签,使用相同的约束集
TextView没有标签的内在内容大小。所以我们必须使用sizeThatFits
并在TextView上创建高度约束,就像这样。
此高度约束是来自笔尖的IBOutlet
ViewController.m
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
Item *item = self.dataSource.items[indexPath.row];
[self.prototypeCell configureWithModel:item];
[self.prototypeCell updateConstraintsIfNeeded];
[self.prototypeCell layoutIfNeeded];
self.prototypeCell.textViewHeightConstraint.constant = [self.prototypeCell.textView sizeThatFits:CGSizeMake(self.prototypeCell.frame.size.width, CGFLOAT_MAX)].height;
[self.prototypeCell updateConstraintsIfNeeded];
[self.prototypeCell layoutIfNeeded];
return [self.prototypeCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
}
CustomCell.m
- (void)configureWithModel:(Item *)model {
self.textView.text = model.content;
}
Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to
找出你不期望的东西; (2)找到添加的代码 不需要的约束或约束并修复它。 (注意:如果您正在看到 您不了解的NSAutoresizingMaskLayoutConstraints,请参阅 到UIView属性的文档 translatesAutoresizingMaskIntoConstraints) ( "&#34 ;, "&#34 ;, "&#34 ;, "&#34 ;, "" )
Will attempt to recover by breaking constraint <NSLayoutConstraint:0x7fa3e3988a90 UITextView:0x7fa3e210f000.height == 200>
在这里您可以看到Autolayout系统删除了TextView上的高度约束。
这里的问题是我们更新了TextView上的高度约束,但是单元格的contentView
似乎忽略了这一点。
我知道这个动态高度的关键是子视图(Label,TextView)必须确定自己的大小(Label有自己的内在大小,对于TextView我们手动设置它的高度约束),以便{{1}然后计算
我错过了什么?
答案 0 :(得分:0)
简单地降低textViewHeightConstraint
(低于1000)的优先级可修复Unable to simultaneously satisfy constraints
问题