我UILabel
在自定义表格单元格中有两个 s,每个在 Interface Builder 中都将“Lines”设置为“0”。它们垂直堆叠,左右边缘对齐,在表格内,行高由自动布局确定。但其中一个人坚持要截断。为什么?它应该占用所需的行并推出表格单元格的高度。
问问题
7037 次
4 回答
5
您需要确保设置preferredMaxLayoutWidth
. UILabel
iOS8 应该为您执行此操作,但我也遇到了在自定义动态大小UITableViewCell
的 s 时结尾被截断的问题。解决方法是将preferredMaxLayoutWidth
, in设置layoutSubviews
为标签的宽度。
于 2015-03-31T13:32:45.167 回答
2
尝试调用[cell.textLabel sizeToFit]
它将根据其内容调整标签视图的大小。
于 2015-03-30T20:05:49.190 回答
0
要获得自动调整单元格大小,您需要确保具备以下条件(考虑到您使用的是自动布局)
- 确保您的视图具有最终触及单元格边缘的约束,在您的情况下,由于您只有一个标签,您可以将顶部、左侧、右侧和底部间距设置为 0 到所有边缘。
- 确保将 tableView 的estimatedRowHeight 属性设置为一个值,例如 tableView.estimatedRowHeight = 44
- 确保在 viewDidLoad 上将 tableView 的 rowHeight 属性设置为 UITableViewAutomaticDimension
- 确保您的标签的行数为 0
有了这个,您的细胞将根据需要生长,您应该能够正确地看到您的标签。
谢谢
于 2015-03-31T16:08:28.240 回答
0
cell 和 viewDidLayoutSubviews 的 layoutSubviews 不起作用。您需要为单元格使用自定义容器视图并在容器 layoutSubviews 中设置 preferredMaxLayoutWidth。我有 UIView 的特殊子类
类扩展视图:UIView{
var didLayoutSubviews:(()->Void)!;
override func layoutSubviews() {
super.layoutSubviews();
if let completion = didLayoutSubviews {
completion();
layoutIfNeeded();
}
}
}
使用示例
container.didLayoutSubviews = {[unowned self] in
let left = self.statusLabel.frame.minX - 4;
width = left - self.title.frame.minX;
self.title.preferredMaxLayoutWidth = round(width)
container.layoutIfNeeded()
}
于 2016-09-02T11:44:48.100 回答