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

时间:2015-05-07 17:23:55

标签: ios textview autolayout constraints

有很多关于如何使用Autolayout和TextView制作动态单元格高度的问题。这是故事

  1. 我遵循这篇文章iOS dynamic table view cells with varying row height and Autolayout。在这种情况下,我们使用TextView替换文章中的第二个标签,使用相同的约束集

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

  3. 此高度约束是来自笔尖的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. 然后我在控制台中看到
    2. 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}然后计算

      我错过了什么?

1 个答案:

答案 0 :(得分:0)

简单地降低textViewHeightConstraint(低于1000)的优先级可修复Unable to simultaneously satisfy constraints问题