3

UILabel在自定义表格单元格中有两个 s,每个在 Interface Builder 中都将“Lines”设置为“0”。它们垂直堆叠,左右边缘对齐,在表格内,行高由自动布局确定。但其中一个人坚持要截断。为什么?它应该占用所需的行并推出表格单元格的高度。

在此处输入图像描述

4

4 回答 4

5

您需要确保设置preferredMaxLayoutWidth. UILabeliOS8 应该为您执行此操作,但我也遇到了在自定义动态大小UITableViewCell的 s 时结尾被截断的问题。解决方法是将preferredMaxLayoutWidth, in设置layoutSubviews为标签的宽度。

于 2015-03-31T13:32:45.167 回答
2

尝试调用[cell.textLabel sizeToFit] 它将根据其内容调整标签视图的大小。

于 2015-03-30T20:05:49.190 回答
0

要获得自动调整单元格大小,您需要确保具备以下条件(考虑到您使用的是自动布局)

  1. 确保您的视图具有最终触及单元格边缘的约束,在您的情况下,由于您只有一个标签,您可以将顶部、左侧、右侧和底部间距设置为 0 到所有边缘。
  2. 确保将 tableView 的estimatedRowHeight 属性设置为一个值,例如 tableView.estimatedRowHeight = 44
  3. 确保在 viewDidLoad 上将 tableView 的 rowHeight 属性设置为 UITableViewAutomaticDimension
  4. 确保您的标签的行数为 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 回答