UITableViewCell最小高度,自动调整单元格大小

nin*_*ple 6 uitableview tableviewcell ios autolayout swift

我正在使用自动调整项目中的单元格大小.我希望将单元格保持在最小值height,但是我无法在内容视图中为我的单元格设置最小height 约束(因为它在" 添加新约束"视图中显示为灰色:

在此输入图像描述

无论如何都要为我的细胞添加最小height 约束

Pus*_*shp 11

将高度约束设置为height >= 60.0无需执行任何操作


Gio*_*gio 10

UITableViewAutomaticDimension启用了系统调用UITableViewCellsystemLayoutSizeFittingSize:withHorizo​​ntalFittingPriority:verticalFittingPriority:方法来计算单元格的高度,所以你也可以继承UITableViewCell,并重写此方法来强制细胞的最小高度,以这种方式

class MinHeightTableViewCell: UITableViewCell {

    var minHeight: CGFloat?

    override func systemLayoutSizeFitting(_ targetSize: CGSize, withHorizontalFittingPriority horizontalFittingPriority: UILayoutPriority, verticalFittingPriority: UILayoutPriority) -> CGSize {
        let size = super.systemLayoutSizeFitting(targetSize, withHorizontalFittingPriority: horizontalFittingPriority, verticalFittingPriority: verticalFittingPriority)
        guard let minHeight = minHeight else { return size }
        return CGSize(width: size.width, height: max(size.height, minHeight))
    }
}
Run Code Online (Sandbox Code Playgroud)

然后

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "minHeightCell", for: indexPath) as! MinHeightTableViewCell
    cell.minHeight = 62 // change with your desidered min height
    cell.textLabel?.text = "some text"
    return cell
}
Run Code Online (Sandbox Code Playgroud)

  • `systemLayoutSizeFittingSize` 被系统调用以根据其约束获取视图的大小。启用 UITableViewAutomaticDimension 时,表格视图使用自动布局来调整单元格的大小,然后在单元格上调用 systemLayoutSizeFittingSize 并根据布局约束返回单元格的大小。我同意你的看法,这不是明确的。 (3认同)
  • 这很有效,但我很好奇:您从哪里发现在启用 UITableViewautomaticDimension 时调用 systemLayoutSizeFitting 的?我在任何地方都找不到关于它的文档。 (2认同)

Das*_*oga 6

我将此约束添加到我的单元格中,但在代码中(快速)

contentView.heightAnchor.constraint(equalToConstant: 80).isActive = true
Run Code Online (Sandbox Code Playgroud)

如果您的单元格视图需要更多空间:

contentView.heightAnchor.constraint(greaterThanOrEqualToConstant: 80).isActive = true
Run Code Online (Sandbox Code Playgroud)