如何更改表视图单元格中的textview高度约束?

关于如何使用Autolayout和TextView里面的dynamic单元格高度存在很多问题。 这是故事

  1. 我遵循这篇文章的iOSdynamic表格视图单元格与不同的行高度和Autolayout 。 在这种情况下,我们用TextViewreplace文章中的第二个标签,使用相同的约束

  2. TextView没有内容大小的标签。 所以我们必须使用sizeThatFits并在TextView上创build高度约束,就像这样。

这个高度约束是来自Nib的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; } 
  1. 然后,我在控制台中看到
 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)find添加不需要的约束或约束的代码并修复它。 (注意:如果你看到你不明白的NSAutoresizingMaskLayoutConstraints,请参阅UIView属性的文档translatesAutoresizingMaskIntoConstraints)(“”,“”,“”,“”,“”)

 Will attempt to recover by breaking constraint <NSLayoutConstraint:0x7fa3e3988a90 UITextView:0x7fa3e210f000.height == 200> 

在这里你可以看到Autolayout系统删除了TextView上的高度限制。

这里的问题是,我们更新TextView的高度约束,但单元格的contentView似乎忽略了这一点。

我知道这个dynamic高度的关键是子视图(Label,TextView)必须确定自己的大小(Label有自己的内在大小,对于TextView我们手动设置它的高度约束),然后计算contentSize

我错过了什么?

简单地降低textViewHeightConstraint (低于1000)的优先级, textViewHeightConstraint解决Unable to simultaneously satisfy constraints问题