Ios UITableViewCell约束未更新
我有一个自定义的Ios UITableViewCell约束未更新,ios,objective-c,uitableview,constraints,ios-autolayout,Ios,Objective C,Uitableview,Constraints,Ios Autolayout,我有一个自定义的UITableViewCell,里面有UITextView、UICollectionView和UITableView。它们之间有一个10像素的空间。在某些情况下,我只有UITextView,有时只有collection视图等 当没有文本时-我必须将UICollection视图上移10像素。如果我没有文本、tableView和collectionView,它应该是零高度 - (void)configureMiddleWrapperState { self.middleWra
UITableViewCell
,里面有UITextView
、UICollectionView
和UITableView
。它们之间有一个10像素的空间。在某些情况下,我只有UITextView
,有时只有collection视图等
当没有文本时-我必须将UICollection视图上移10像素。如果我没有文本、tableView和collectionView,它应该是零高度
- (void)configureMiddleWrapperState
{
self.middleWrapperHasNote = self.noteTextView.text.length > 0;
self.noteTextViewTopConstraint.constant = self.middleWrapperHasNote ? 7.f : 0.f;
self.staffWrapperTopConstraint.constant = self.middleWrapperHasStaff ? 7.f : 0.f;
self.tagsWrapperTopConstraint.constant = self.middleWrapperHasTags ? 7.f : 0.f;
BOOL middleWrapperHasAtleastOne = self.middleWrapperHasNote || self.middleWrapperHasStaff ||
self.middleWrapperHasTags;
self.middleWrapperLastTenPixelSpaceConstraint.constant = middleWrapperHasAtleastOne ? 7.f : 0.f;
[self setNeedsUpdateConstraints];
}
- (void)layoutSubviews
{
[super layoutSubviews];
[self setExcludedPaths];
[self configureMiddleWrapperState];
}
结果与预期不同:
而不是一行。
当仅显示文本时,看起来与预期一致。
只有上下滚动多次,约束才会生效。尝试添加
[self setNeedsLayout];
之后
我发现了问题所在。因为我的self.middleWrapperHasTags在重用时设置不正确 它将循环-setNeedsLayout强制[self-layoutSubviews],因此我认为您必须将逻辑移到其他地方。也许-(void)awakeFromNib会适合。在awakeFromNib中,我不知道如何提供注释文本等。因为它没有在awakeFromNib中设置,然后创建一个新方法,用文本配置单元格,然后更新约束-(void)configureWithText:(NSString*)newText;我发现了问题所在。因为我的self.middleWrapperHasTags在重用时设置不正确。顺便说一下,谢谢你的帮助
[self setNeedsUpdateConstraints];