在表格单元格中更改运行时的自动布局约束

时间:2014-11-05 19:22:39

标签: ios xcode autolayout

我已经创建了一个UITableViewCell子类,它在IB中创建了一堆按钮和标签,这些按钮和标签都有插座。我试图做的是,根据细胞的内容,UIButton需要稍微向上移动,或保持在原位。我为约束创建了一个需要更改的插座,以便我可以在代码中更改它。

cellForRowAtIndexPath内,我有以下内容:

[cell.usernameButton.superview removeConstraint:cell.usernameTopConstraint];
int topDistance;
// code to conditionally change topDistance for constraint is omitted here, results in either 5 or 15

cell.usernameTopConstraint = [NSLayoutConstraint constraintWithItem:cell.usernameButton
                                                               attribute:NSLayoutAttributeTop
                                                               relatedBy:NSLayoutRelationEqual
                                                                  toItem:cell.usernameButton.superview
                                                               attribute:NSLayoutAttributeTop
                                                              multiplier:1
                                                                constant:topDistance];

[cell.usernameButton.superview addConstraint:cell.usernameTopConstraint];
[cell.usernameButton.superview layoutIfNeeded];

问题是,现有的约束不能被删除,因为我得到错误:"无法同时满足约束" - 它显示的两个可以在上面应用的两个。

奇怪的是,当我记录cell.usernameButton.superview时,对于每个单元格它都为空,直到具有抛出约束错误的非默认topDistance的单元格为止。然后为每个单词后面的单元格设置它。

为什么不删除约束?我已经尝试了一些不同的方式来引用按钮的超级视图,但这些方法似乎都不起作用。

1 个答案:

答案 0 :(得分:1)

为什么不改变常量而不是删除和重新添加约束?

cell.usernameConstraint.constant = topDistance;