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];