Nic*_* S. 2 ios autolayout nslayoutconstraint
我正在实现一个自定义UITableView,它将垂直展开单个单元格以显示用户点击单元格时的详细信息.
当我在didSelectRowAtIndexPath处理程序中将addConstraint调用到UITableViewCell时,我遇到了一个问题:
Unable to simultaneously satisfy constraints.
...
If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0xa0c9cc0 V:[UITableView:0xc339c00]-(0)-| (Names: '|':UITableViewCellContentView:0xa0c8910 )>",
"<NSAutoresizingMaskLayoutConstraint:0xa0b8600 h=--& v=--& V:[UITableViewCellContentView:0xa0c8910(25)]>",
"<NSLayoutConstraint:0xa0caad0 V:|-(42)-[UITableView:0xc339c00] (Names: '|':UITableViewCellContentView:0xa0c8910 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0xa0c9cc0 V:[UITableView:0xc339c00]-(0)-| (Names: '|':UITableViewCellContentView:0xa0c8910 )>
Run Code Online (Sandbox Code Playgroud)
以下是我实施的更多细节:
在步骤2,发生上述"无法同时满足约束"错误.我相信这是因为didSelectRowAtIndexPath在heightForRowAtIndex之前被调用.我的预感是translatesAutoresizingMaskIntoConstraints设置(在我的实现中是YES)是基于单元格高度的运行时值创建新约束,该值在运行didSelectRowAtIndexPath代码后更新.
是否有推荐的方法来解决此问题?或者是否有另一种方法来执行单元格扩展,这仍然允许我为单元格的内容设置必要的单元格约束?
弄清楚了.我的部分问题与此处的解决方案有关:UITableViewCellContentView高度与heightForRowAtIndexPath有何不同:
我发现我需要添加[self.contentView setAutoresizingMask:UIViewAutoresizingFlexibleHeight]单元格的子类,awakeFromNib以允许调整单元格的高度.
不过,这不是整个解决方案.在做了一些阅读之后,我找到了我addConstraint之前调用的另一个问题的答案heightForRowAtIndex.我的怀疑是正确的,这是有问题的调用addConstraint在didSelectRowAtIndexPath.
每UIView类参考,以添加约束的正确方法是我打电话给- (void)setNeedsUpdateConstraints在didSelectRowAtIndexPath.这会导致调用updateConstraints,这是我必须为自定义约束更新实现的函数.
| 归档时间: |
|
| 查看次数: |
2137 次 |
| 最近记录: |