如何更改表视图单元格中的textview高度约束?
关于如何使用Autolayout和TextView里面的dynamic单元格高度存在很多问题。 这是故事
-
我遵循这篇文章的iOSdynamic表格视图单元格与不同的行高度和Autolayout 。 在这种情况下,我们用TextViewreplace文章中的第二个标签,使用相同的约束
-
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; }
- 然后,我在控制台中看到
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
问题