我已经创建了一个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的单元格为止。然后为每个单词后面的单元格设置它。
为什么不删除约束?我已经尝试了一些不同的方式来引用按钮的超级视图,但这些方法似乎都不起作用。
答案 0 :(得分:1)
为什么不改变常量而不是删除和重新添加约束?
cell.usernameConstraint.constant = topDistance;