【发布时间】:2016-03-10 07:11:58
【问题描述】:
当我通过情节提要尝试约束时,它工作得很好。
这是我的视图控制器。
当我尝试使用视觉约束时,我得到了这样的屏幕。
这是我的视觉限制:
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 和标签,但这也没有改变我做错了什么?
帮我解决这个问题谢谢:)
【问题讨论】:
-
约束是累积的,不会相互覆盖。如果您有一个现有约束,则设置另一个相同类型的约束不会覆盖前一个约束。正如我在您的代码中看到的那样,您在单元格的 contentView 上添加了许多约束,并且 tableView 单元格被重用,因此有很多更改是您一次又一次地在单元格上添加约束。但在 Interface Builder 的情况下,我会在单元对象初始化时添加一次所有约束。
-
@keshavvishwkarma 最好的方法是什么?
-
从 Interface Builder 添加约束是最好且简单的方法,但是有一些约束是 Interface Builder 无法实现的(这些是在运行时更改),对于它们,我们必须以编程方式添加约束。
-
要以编程方式轻松添加约束,您应该尝试github.com/keshavvishwkarma/KVConstraintExtensionsMaster library。
标签: ios objective-c autolayout nslayoutconstraint