【问题标题】:UITableViewCell Constraints Not UpdatedUITableViewCell 约束未更新
【发布时间】:2017-01-31 13:30:20
【问题描述】:

我有一个自定义的UITableViewCell,里面有UITextViewUICollectionViewUITableView。它们之间有 10 px 的空间。在某些情况下,我只有UITextView,有时只有集合视图等。

当没有文本时 - 我必须将 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];
}

结果与预期不同: 而不是一行。 当只有文本看起来像预期时。

只有当我多次上下滚动时,约束才会起作用。

【问题讨论】:

    标签: ios objective-c uitableview constraints ios-autolayout


    【解决方案1】:

    尝试添加

    [self setNeedsLayout];
    

    之后

    [self setNeedsUpdateConstraints];
    

    【讨论】:

    • 它将循环 - setNeedsLayout 强制 [self layoutSubviews]
    • 所以我认为你必须将你的逻辑转移到其他地方。也许 - (void) awakeFromNib 会适合。
    • 在 awakeFromNib 中我不知道如何提供注释文本等。因为它没有在 awakeFromNib 中设置
    • 然后创建一个新方法,用文本配置单元格,然后更新约束 - (void) configureWithText:(NSString *) newText;
    • 我找到了问题所在。因为我的 self.middleWrapperHasTags 在重用时设置不正确。顺便感谢您的帮助
    【解决方案2】:

    我找到了问题所在。因为我的 self.middleWrapperHasTags 在重用时设置不正确。

    【讨论】:

      猜你喜欢
      • 2020-12-25
      • 2020-09-30
      • 2014-02-07
      • 2017-06-28
      • 1970-01-01
      • 2019-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多