tableViewCell的ContentView无法正确自动调整大小?

时间:2018-02-16 22:34:46

标签: swift uitableview autolayout snapkit

我已经为我的单元格添加了2个标签并使用snapkit设置了这些约束,问题是我无法正确扩展单元格,它保持默认高度:

List<MNISTSample> trainSamples = MNISTSamples.stream(
        trainLabelPath, 
        trainImagePath
    ).limit(TRAIN_LIMIT).collect(Collectors.toList());

List<MNISTSample> testSamples = MNISTSamples.stream(
        testLabelPath, 
        testImagePath
    ).limit(TEST_LIMIT).collect(Collectors.toList());

我可以看到四个边缘的映射,但是我知道高度并不是这些边缘所暗示的,当内容是天生的,动态的,并且可以是各种高度时,如何应用高度......

标签的设置如下所示:

titleLabel.snp.makeConstraints { (make) -> Void in
        make.top.equalTo(contentView.snp.top)
        make.bottom.equalTo(descriptionLabel.snp.top)
        make.left.equalTo(contentView.snp.left)
        make.right.equalTo(contentView.snp.right)
    }
    descriptionLabel.snp.makeConstraints { (make) -> Void in
        make.top.equalTo(titleLabel.snp.bottom)
        make.bottom.equalTo(contentView.snp.bottom)
        make.left.equalTo(contentView.snp.left)
        make.right.equalTo(contentView.snp.right)
    }

2 个答案:

答案 0 :(得分:1)

为表格视图指定estimatedRowHeight,并将其rowHeight设置为UITableViewAutomaticDimension。现在细胞将自我调整大小。好吧,如果标签被内容视图的所有四边固定,并且单元格是自我调整大小,那么您需要做的就是:标签将自动更改其高度以适应其文本,单元格将自动更改大小以容纳标签。

答案 1 :(得分:0)

首先,我认为您应该使用子类化的UITableViewCell类初始化方法将子视图添加到contentView中。

    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
           super.init(style: style, reuseIdentifier: reuseIdentifier)
           self.contentView.addSubview(titleLabel)
           self.contentView.addSubview(descriptionLabel)
}

第二,请确保在viewDidLoad方法(可能在ViewController中)中添加了以下两行:

tableView.estimatedRowHeight = 44.0
tableView.rowHeight = UITableView.automaticDimension

当然,您应该更改估计行高度以适应您的需求。

还有一件值得一提的事情-您可以更轻松地创建这些约束(使用SnapKit的强大功能):

titleLabel.snp.makeConstraints { (make) -> Void in
    make.top.left.right.equalTo(contentView)
}
descriptionLabel.snp.makeConstraints { (make) -> Void in
    make.top.equalTo(titleLabel.snp.bottom)
    make.bottom.left.right.equalTo(contentView)
}