【发布时间】:2017-03-16 08:40:24
【问题描述】:
自定义大小的 UITableViewCell:MyTableViewCell.m
-(void) viewDidLoad{
UIView *sample = [[UIView alloc] init];
[self.contentView addSubview: sample];
//Fake code here. Let sample view fill the whole contentView:
Constraint1: sample.leading = contentView.leading;
Constraint2: sample.trailing = contentView.trailing;
Constraint3: sample.top = contentView.top;
Constraint4: sample.bottom = contentView.bottom;
Constraint5: sample.height = 20;
NSLayoutConstraint:activateConstriant(constraints 1-5);
}
此代码有效,MyTableViewCell 的高度为 20。
但是,我想在运行时更改高度(在此单元格添加到 UITableView 之后),所以我向 MyTableViewCell.m 添加了一个新方法 p>
-(void) updateHeight:(CGFloat)newHeight{
//Fake code here. change the constant of constraint1
Constraint1 = get reference of Constraint1 in viewDidLoad();
Constraint1.constant = newHeight
}
我运行代码并调用updateHeight:10 并收到日志警告:
2017-03-16 16:23:11.102858 [14541:568021] [LayoutConstraints] 无法同时满足约束。 以下列表中的至少一个约束可能是您不想要的。 试试这个: (1)查看每个约束并尝试找出您不期望的; (2) 找到添加了一个或多个不需要的约束的代码并修复它。 ( "", "", "", “” ) 将尝试通过打破约束来恢复
我自己的观点是,我在 viewDidLoad 创建的约束会自动创建几个其他约束,例如 contentView.height=20,并且我对原始约束的更改与系统创建的约束冲突。
我测试了更改示例视图的前导而不是updateHeight: 中的高度,并且它有效!因为前导的变化不会影响 contentView 自身的高度约束?
在这种情况下,我应该如何对自动布局进行动态更改?
谢谢~~~
【问题讨论】:
-
试试
sample.translatesAutoresizingMaskIntoConstraints = NO。这通常可以解决问题。 -
你最终发现了吗?这里的所有答案都是为了初始化,而不是在旅途中更新它,这是您(和我)需要的。有什么发现吗?
标签: ios objective-c uitableview autolayout