我在代码中将高度布局约束添加到我的UICollectionViewCell子类中,该子类根据文本的长度设置高度。 See this question.我可以发布高度计算的代码,但我不认为这是问题,因为它适用于前4个单元格,但随后在第5个单元格上崩溃。
@property (weak, nonatomic) UILabel *name;
这是我创建约束的方式。
NSLayoutConstraint *labelHeightContraint = [NSLayoutConstraint constraintWithItem:self.name attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0f constant:labelSize.height];
[self.name addConstraint:labelHeightContraint];
这就是我得到的错误。
Unable to simultaneously satisfy constraints.
(
"<NSLayoutConstraint:0x9ff8770 V:[UILabel:0x9ff72d0(60.843)]>",
"<NSLayoutConstraint:0x9feb590 V:[UILabel:0x9ff72d0(40.562)]>"
)
我似乎有2个身高限制,对我来说没有任何意义。在Interface Building中我没有高度限制(见截图)。
在崩溃显示高度限制之前打印出约束。
<__NSArrayM 0x9eb0a00>(
<NSLayoutConstraint:0x9ea1670 V:[UILabel:0x9eb2e30(60.843)]>,
<NSContentSizeLayoutConstraint:0x9fa0580 H:[UILabel:0x9eb2e30(72)] Hug:251 CompressionResistance:750>,
<NSContentSizeLayoutConstraint:0x9fa7bf0 V:[UILabel:0x9eb2e30(61)] Hug:251 CompressionResistance:750>
)
我计算的约束是
<NSLayoutConstraint:0x9ea9b50 V:[UILabel:0x9eb2e30(40.562)]>
答案 0 :(得分:0)
只需尝试每个约束的设置优先级
答案 1 :(得分:0)
UICollectionView
重复使用所有UICollectionViewCell
个实例。当一个屏幕被取消时,它会被重复使用。不同的细胞需要不同的高度,因此每个细胞的高度限制是不同的。重复使用单元格时不会删除高度限制,因此导致多个高度限制和崩溃。
解决方案是不使用自动布局,只修改框架(是的,我尝试删除高度约束,不起作用)。
CGRect labelFrame = self.name.frame;
labelFrame.size.height = labelSize.height;
self.name.frame = labelFrame;