字幕单元格的快速自动行高

时间:2017-01-02 05:17:31

标签: ios swift uitableview

我在UITableView中使用了字幕单元格。我在viewDidLoad中设置了以下内容以使行高自动展开:

    tableView.rowHeight = UITableViewAutomaticDimension
    tableView.estimatedRowHeight = 100

我还将单元格的标题和副标题设置为自动换行:

    cell.textLabel?.numberOfLines = 0
    cell.textLabel?.lineBreakMode = .byWordWrapping

    cell.detailTextLabel?.numberOfLines = 0
    cell.detailTextLabel?.lineBreakMode = .byWordWrapping

当我输入标题时,一切都很好。但副标题并没有扩大排。我还需要做些什么才能让副标题增加行高吗?

image

3 个答案:

答案 0 :(得分:5)

你应该拿一个标签并给予这样的约束, enter image description here

之后,写下tableview的这两个委托方法。

func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

因此,tableview高度按照文本大小增加。

答案 1 :(得分:2)

使用https://stackoverflow.com/a/40168001/4045472中的代码并将单元格定义为:

class MyTableViewCell: UITableViewCell {

    override func systemLayoutSizeFitting(_ targetSize: CGSize, withHorizontalFittingPriority horizontalFittingPriority: UILayoutPriority, verticalFittingPriority: UILayoutPriority) -> CGSize {

        self.layoutIfNeeded()
        var size = super.systemLayoutSizeFitting(targetSize, withHorizontalFittingPriority: horizontalFittingPriority, verticalFittingPriority: verticalFittingPriority)

        if let textLabel = self.textLabel, let detailTextLabel = self.detailTextLabel {
            let detailHeight = detailTextLabel.frame.size.height
            if detailTextLabel.frame.origin.x > textLabel.frame.origin.x { // style = Value1 or Value2
                let textHeight = textLabel.frame.size.height
                if (detailHeight > textHeight) {
                    size.height += detailHeight - textHeight
                }
            } else { // style = Subtitle, so always add subtitle height
                size.height += detailHeight
            }
        }

        return size

    }

}

将故事板中的单元格自定义类更改为MyTableViewCell将自动设置正确的大小。

在表视图数据源的tableView:cellForRow:函数中,设置标签后'文字,请致电cell.setNeedsLayout()以强制它调整布局。

答案 2 :(得分:0)

您需要设置约束,以便单元格可以根据标签的大小自动调整大小。这是关于动态单元格的教程。 https://www.raywenderlich.com/129059/self-sizing-table-view-cells