UITableViewCell 中的 UILabel 正确使用自动布局大小但仅在旋转时换行
UILabel in UITableViewCell using Autolayout sizes correctly but only wraps on rotation
我在 UITableView
s 上使用 WWDC '14 演讲中的编程约束,以便我的应用程序可以支持动态文本并自动调整我的 table 视图单元格的高度。但是,只有当我将设备旋转到横向并返回时,包装才会出现。下面的第一张图显示了这一点:最初的观点是错误的。第二个显示了我的预期,但我只有在旋转到横向并返回后才得到正确的行为。
注意单元格的大小是正确的:自动布局系统发现我需要两行 space,但文本没有换行。
我尝试设置换行模式 - 它有点管用(根据模式在字符或单词处换行,但在旋转之前我看不到字符串的其余部分)。
标签的约束与 WWDC '14 演讲中的约束相同。我没有收到自动布局投诉。我已将 UILabel
的行数设置为 0,将行高设置为 UITableViewAutomaticDimension
并设置估计行高。
有没有人见过这个并修复它?我做错了什么?
第二张图片:
我 运行 遇到了与 UICollectionViewCell
类似的问题。我想要一个可以根据需要增长的多行标签。您正在做的事情可能应该有效,尤其是因为这就是 WWDC 视频中显示的所有内容。
在调用 [super layoutSubviews]
之前,我最终在 layoutSubviews
内调用了 [label setNeedsUpdateConstraints]
。
使用这种方法,我 而不是 明确地将 preferredMaxLayoutWidth
设置为 0。这实际上给我带来了问题。默认的是0,所以你可以不用。
我对其他同样有效的方法做了一些说明:
- 保存标签文本,将 label.text 设置为 nil,然后将文本设置回
原来在 [super layoutSubviews].
之前
- 在[super layoutSubviews]之后,将preferredMaxLayoutWidth设置为当前标签宽度(已应用约束,只是想将布局宽度值与实际同步,然后触发一些额外的工作)
如果您没有自定义单元格 class 来执行此操作,您可以尝试从 table 视图调用 [label setNeedsUpdateConstraints]
delegate/data 源方法,例如cellForRowAtIndexPath
在 UILabel 的子类中,我放置了这段代码:
- (void)layoutSubviews
{
[super layoutSubviews];
self.preferredMaxLayoutWidth = self.bounds.size.width;
}
我在 UITableView
s 上使用 WWDC '14 演讲中的编程约束,以便我的应用程序可以支持动态文本并自动调整我的 table 视图单元格的高度。但是,只有当我将设备旋转到横向并返回时,包装才会出现。下面的第一张图显示了这一点:最初的观点是错误的。第二个显示了我的预期,但我只有在旋转到横向并返回后才得到正确的行为。
注意单元格的大小是正确的:自动布局系统发现我需要两行 space,但文本没有换行。
我尝试设置换行模式 - 它有点管用(根据模式在字符或单词处换行,但在旋转之前我看不到字符串的其余部分)。
标签的约束与 WWDC '14 演讲中的约束相同。我没有收到自动布局投诉。我已将 UILabel
的行数设置为 0,将行高设置为 UITableViewAutomaticDimension
并设置估计行高。
有没有人见过这个并修复它?我做错了什么?
第二张图片:
我 运行 遇到了与 UICollectionViewCell
类似的问题。我想要一个可以根据需要增长的多行标签。您正在做的事情可能应该有效,尤其是因为这就是 WWDC 视频中显示的所有内容。
在调用 [super layoutSubviews]
之前,我最终在 layoutSubviews
内调用了 [label setNeedsUpdateConstraints]
。
使用这种方法,我 而不是 明确地将 preferredMaxLayoutWidth
设置为 0。这实际上给我带来了问题。默认的是0,所以你可以不用。
我对其他同样有效的方法做了一些说明:
- 保存标签文本,将 label.text 设置为 nil,然后将文本设置回 原来在 [super layoutSubviews]. 之前
- 在[super layoutSubviews]之后,将preferredMaxLayoutWidth设置为当前标签宽度(已应用约束,只是想将布局宽度值与实际同步,然后触发一些额外的工作)
如果您没有自定义单元格 class 来执行此操作,您可以尝试从 table 视图调用 [label setNeedsUpdateConstraints]
delegate/data 源方法,例如cellForRowAtIndexPath
在 UILabel 的子类中,我放置了这段代码:
- (void)layoutSubviews
{
[super layoutSubviews];
self.preferredMaxLayoutWidth = self.bounds.size.width;
}