如何阻止UILabel在UITableCellView中使用'...'截断

时间:2015-03-30 19:48:28

标签: ios uitableview autolayout uilabel ios-autolayout

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

enter image description here

4 个答案:

答案 0 :(得分:5)

您需要确保设置preferredMaxLayoutWidth的{​​{1}}。 iOS8应该为你做这件事,但是当我有自定义动态大小的UILabel时,我也遇到了被截断的问题。解决此问题的方法是将UITableViewCell中的preferredMaxLayoutWidth设置为标签的宽度。

答案 1 :(得分:2)

尝试拨打[cell.textLabel sizeToFit] 它将根据其内容调整labelview的大小。

答案 2 :(得分:0)

要获得自动细胞大小调整,您需要确保拥有以下内容(考虑到您使用自动布局)

  1. 确保您的视图具有最终触及单元格边缘的约束,在您的情况下,因为您只有一个标签,您可以将顶部,左侧,右侧和底部间距设置为0到所有边缘。
  2. 确保将tableView的estimatedRowHeight属性设置为一个值,例如tableView.estimatedRowHeight = 44
  3. 确保在viewDidLoad上将tableView&#39的rowHeight属性设置为UITableViewAutomaticDimension
  4. 确保您的标签的行数为0
  5. 这样,您的细胞将根据需要增长,您应该能够正确地看到您的标签。

    由于

答案 3 :(得分:0)

cell和viewDidLayoutSubviews的layoutSubviews不起作用。您需要为单元格使用自定义容器视图,并在容器layoutSubviews中设置preferredMaxLayoutWidth。我有UIView的特殊子类

类ExtendedView: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()
}