UITableViewCell 约束未更新
Posted
技术标签:
【中文标题】UITableViewCell 约束未更新【英文标题】:UITableViewCell Constraints Not Updated 【发布时间】:2017-01-31 13:30:20 【问题描述】:我有一个自定义的UITableViewCell
,里面有UITextView
、UICollectionView
和UITableView
。它们之间有 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];
结果与预期不同: 而不是一行。 当只有文本看起来像预期时。
只有当我多次上下滚动时,约束才会起作用。
【问题讨论】:
【参考方案1】:尝试添加
[self setNeedsLayout];
之后
[self setNeedsUpdateConstraints];
【讨论】:
它将循环 - setNeedsLayout 强制 [self layoutSubviews] 所以我认为你必须将你的逻辑转移到其他地方。也许 - (void) awakeFromNib 会适合。 在 awakeFromNib 中我不知道如何提供注释文本等。因为它没有在 awakeFromNib 中设置 然后创建一个新方法,用文本配置单元格,然后更新约束 - (void) configureWithText:(NSString *) newText; 我找到了问题所在。因为我的 self.middleWrapperHasTags 在重用时设置不正确。顺便感谢您的帮助【参考方案2】:我找到了问题所在。因为我的 self.middleWrapperHasTags 在重用时设置不正确。
【讨论】:
以上是关于UITableViewCell 约束未更新的主要内容,如果未能解决你的问题,请参考以下文章
自定义 tableviewcell 动态高度未根据约束更新(以编程方式自动布局)
在 UITableviewCell 中使用 UICollection 视图时未调用 UICollectionView 委托方法“didSelectItemAtIndexPath”
从 cellForRowAt 更新时,UITableViewCell 中的活动约束不会更新