【发布时间】:2014-09-25 02:44:10
【问题描述】:
我有一个包含多行标签的 UITableViewCell 子类,我希望单元格根据该标签的内容动态调整自身大小。我知道 iOS 8 引入了基于 AutoLayout 约束的自动调整单元格大小,并且我已经在 SO 上找到了几个这样的示例,但是我仍然无法正确实现此行为。
这是我的 updateConstraints 实现:
- (void)updateConstraints {
[super updateConstraints];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-10-[_nameLabel(==20)]-10-[_tweetLabel]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_nameLabel, _tweetLabel)]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[_avatarView]-10-[_nameLabel]-10-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_avatarView, _nameLabel)]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[_nameLabel]-10-[_tweetLabel]-10-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_nameLabel, _tweetLabel)]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[_avatarView]-10-[_tweetLabel]-10-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_avatarView, _tweetLabel)]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-10-[_avatarView(==45)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_avatarView)]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-10-[_avatarView(==45)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_avatarView)]];
}
在表格视图控制器中,我将行高设置为 UITableViewAutomaticDimension(我还设置了估计的行高)。在运行时,我收到一系列自动布局错误,并且所有表格视图单元格看起来几乎完全重叠。
自动布局冲突发生在以下约束之间:
V:|-(10)-[_nameLabel]V:[_nameLabel(20)]V:[_nameLabel]-(10)-[_tweetLabel]V:[_tweetLabel]-(10)-|V:[cell(44)]
我怀疑最后一个约束“UIView-Encapsulated-Layout-Height”,它强制高度为 44,是问题的原因,但我不太确定它来自哪里,所以希望有人可以摆脱对这个问题有所了解。
【问题讨论】:
-
您是否检查过您的 UITableViewCell 上的 translatesAutorezisingMaskIntoConstraints 是否设置为 NO?
-
@kljhanson 刚刚尝试过,感谢您的建议,但现在一个大的灰色矩形占据了大部分屏幕(Xcode 的视图检查显示它有数百个单元格分隔符)。我肯定在委托方法中给出了正确的单元格计数,知道为什么会发生这种情况吗?
-
不确定这是否是 Apple 自动布局错误,但本文中的用户建议它是:stackoverflow.com/questions/25059443/… 我自己的动态 tableviewcell 高度也得到相同 (44) 的单元格高度约束冲突。它似乎只出现在 iOS 8 中,iOS 7 正在运行。奇怪的是,如果所有单元格的高度相同并且您没有进行动态单元格高度,则不会出现此问题。我真的希望这是一个 Apple 错误 >.
标签: ios objective-c uitableview autolayout