我在UITableView中使用了字幕单元格。我在viewDidLoad
中设置了以下内容以使行高自动展开:
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 100
我还将单元格的标题和副标题设置为自动换行:
cell.textLabel?.numberOfLines = 0
cell.textLabel?.lineBreakMode = .byWordWrapping
cell.detailTextLabel?.numberOfLines = 0
cell.detailTextLabel?.lineBreakMode = .byWordWrapping
当我输入标题时,一切都很好。但副标题并没有扩大排。我还需要做些什么才能让副标题增加行高吗?
答案 0 :(得分:5)
之后,写下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