为什么视觉约束不支持UITableViewAutomaticDimension?

时间:2016-03-10 07:11:58

标签: ios objective-c autolayout nslayoutconstraint

当我通过故事板尝试约束时,它完美地工作。

enter image description here

这是我的视图控制器。

enter image description here

当我尝试使用视觉约束时,我会看到这样的屏幕。

enter image description here

这是我的视觉约束:

NSDictionary *viewsdictionary=@{@"txtview":cell.txtview,
                                    @"lbldate":cell.lbldate};
    [cell.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[txtview]-|" options:0 metrics:nil views:viewsdictionary]];
    [cell.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[lbldate]-|" options:0 metrics:nil views:viewsdictionary]];
    [cell.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[txtview]-10-[lbldate(200@1000)]-|" options:0 metrics:nil views:viewsdictionary]];
    if([from isEqualToString:_tophonenumber])
    {

        cell.txtview.layer.borderWidth=2.0;
        cell.txtview.layer.borderColor=[UIColor yellowColor].CGColor;
        [cell.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[lbldate]-10-[txtview]-|" options:0 metrics:nil views:viewsdictionary]];

    }
-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:YES];
    self.tableview.estimatedRowHeight = 160;
    self.tableview.rowHeight = UITableViewAutomaticDimension;
 }

由于某些原因我正在改变txtview和标签,但那也没有改变我做错了什么?

帮助我解决这个问题,谢谢:)

1 个答案:

答案 0 :(得分:0)

在你的IB约束中,我假设你的日期有一个固定的宽度,而你的文本框有一个可变的宽度,只是被要求坚持日期前沿,日期只从后缘粘附到superview尾随?在程序化约束中,除非满足字符串if语句,否则不会将该日期赋予固定宽度,对吧?否则,日期没有得到它所需的限制。

另外,在更新约束后,您是否调用[cell layoutIfNeeded]?如果更新cellForRowAtIndexPath上的约束,他们可能也需要它。这也是你可能需要对UITableView做的最后一件事,以便更新表:

[self.tableView beginUpdates];
[self.tableView endUpdates];

如果在更新单元格约束后调用它,则可确保正确地重新对齐tableview单元格(特别是如果高度已更改)。但是我不会在每个单元格发生变化后调用它 - 在tableview完成更新时执行一次。