tableViewCell 的 ContentView 不能正确自动调整大小?

Posted

技术标签:

【中文标题】tableViewCell 的 ContentView 不能正确自动调整大小?【英文标题】:ContentView for tableViewCell not auto-resizing correctly? 【发布时间】:2018-02-16 22:34:46 【问题描述】:

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

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)
    

如您所见,我映射了四个边,但是我知道这些并不暗示高度,当内容本质上是动态的并且可能是各种高度时,我如何应用高度...

标签设置如下所示:

 lazy var titleLabel: UILabel = 
    let titleLabel = UILabel()
    titleLabel.textColor = .green
    titleLabel.textAlignment = .center
    contentView.addSubview(titleLabel)
    return titleLabel
()

lazy var descriptionLabel: UILabel = 
    let descriptionLabel = UILabel()
    descriptionLabel.textColor = .dark
    descriptionLabel.textAlignment = .center
    descriptionLabel.numberOfLines = 0
    contentView.addSubview(descriptionLabel)
    return descriptionLabel
()

【问题讨论】:

【参考方案1】:

给表格视图一个estimatedRowHeight,并将其rowHeight 设置为UITableViewAutomaticDimension。现在单元格将自行调整大小。好吧,如果一个标签被所有四个边固定到内容视图,并且如果单元格是自定大小的,那么这就是您所要做的:标签将自动改变它的高度以适应它文本,并且单元格将自动改变大小以适应标签。

【讨论】:

可在此处下载示例项目:github.com/mattneub/Programming-ios-Book-Examples/tree/master/… 是的,那么我所做的是正确的吗?但它不起作用!单元格保持其大小 嘿,我向你展示了我的代码,它确实工作了。下载项目看看!你没有显示你的代码(我不知道表格视图是如何配置的)所以谁知道你做错了什么。【参考方案2】:

首先我认为你应该在子类 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

当然,您应该更改estimatedRowHeight 以满足您的需要。

还有一点值得一提 - 您可以更轻松地创建这些约束(使用 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)

【讨论】:

以上是关于tableViewCell 的 ContentView 不能正确自动调整大小?的主要内容,如果未能解决你的问题,请参考以下文章

作为 XIB 的 TableViewCell 中的集合视图

tableviewcell 中的图像不会立即出现

我无法将 TableViewCell 按钮连接到 TableViewController!如何将 TableViewCell 中的值连接到 TableViewController?

MVVMCross iOS如何在TableViewCell按钮中传递参数

从 `ViewWillAppear` 触发 `TableViewCell` 函数

tableviewCell实用小技术