ios8自动布局:多行(可能是0行)标签
Posted
技术标签:
【中文标题】ios8自动布局:多行(可能是0行)标签【英文标题】:ios8 autolayout: BOTH multi-line(maybe 0 line) label 【发布时间】:2015-01-27 03:51:13 【问题描述】:我想在一个单元格中显示两个 UILabel(Title, Subtitle)。代表标题:多行 > 0代表副标题: 0 ≤ 多行 ≤ 2 这里有个bug(比如说title&subtitle都是2行,单元格的indexPath.row = 1): 我第一次运行模拟器时,标题只显示 1 行,副标题显示 2 行。在我滚动 tableView 并返回到第一个 indexPath.row 后,它显示正确!好像是这样的:
第一次: —————————————————— 这是图块,应该显示...这是副标题,应该显示 2 行。 —————————————————— 滚动并返回此单元格后: —————————————————— 这是标题,它应该显示 两行。这是字幕,应该显示 2 行。 ——————————————————
我做了什么:
在控制器中:tableView.estimatdRowHeight = 79
tableView.rowHeight = UITableViewAutomaticDimension
在故事板中:
标题:
-
引领空间到superview
超级视图的尾随空间
Superview 的顶部空间
前导与副标题对齐
将尾随与字幕对齐
字幕的底部空间
对于字幕:
-
超级视图的底部空间
对齐标题到标题
将尾随与标题对齐
标题的顶部空间
我为这个错误困惑了好几天,有什么想法可以解决这个问题吗?非常感谢!!!(对不起,因为我没有足够的声誉,所以缺少图像>
【问题讨论】:
【参考方案1】:从情节提要加载的单元格的初始宽度不正确。
这就是为什么标签第一次没有正确调整大小,但在您(重新加载数据,或)将单元格滚动到屏幕外,然后在屏幕上时正确显示的原因。
由于单元格宽度最初不正确,因此标签最终使用比表格更宽的preferredMaxLayoutWidth
。 (标签认为它有更多空间可以将所有内容放在一行中。)
对我有用的解决方案是确保我的(子类)单元格的宽度与 tableView 的宽度匹配:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
[cell adjustSizeToMatchWidth:CGRectGetWidth(self.tableView.frame)];
[self configureCell:cell forRowAtIndexPath:indexPath];
[cell setNeedsUpdateConstraints];
[cell updateConstraintsIfNeeded];
return cell;
在 TableViewCell.m 中:
- (void)adjustSizeToMatchWidth:(CGFloat)width
// Workaround for visible cells not laid out properly since their layout was
// based on a different (initial) width from the tableView.
CGRect rect = self.frame;
rect.size.width = width;
self.frame = rect;
// Workaround for initial cell height less than auto layout required height.
rect = self.contentView.bounds;
rect.size.height = 99999.0;
rect.size.width = 99999.0;
self.contentView.bounds = rect;
我还建议您查看smileyborg 的excellent answer about self-sizing cells,以及他的sample code。当我遇到与您遇到的相同问题时,这就是让我找到解决方案的原因。
【讨论】:
以上是关于ios8自动布局:多行(可能是0行)标签的主要内容,如果未能解决你的问题,请参考以下文章
具有自动布局的多行UILabel,如何在不更改标签框架的情况下根据内容调整字体大小?
UITableViewCell 中多个 UIlable 的自动布局