字幕单元格的 Swift 自动行高
Posted
技术标签:
【中文标题】字幕单元格的 Swift 自动行高【英文标题】:Swift Automatic Row Height for Subtitle Cell 【发布时间】:2017-01-02 05:17:31 【问题描述】:我在 UITableView 中使用了一个字幕单元格。我在viewDidLoad
中设置了以下内容,以使行高自动扩展:
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 100
我还将单元格的标题和副标题设置为自动换行:
cell.textLabel?.numberOfLines = 0
cell.textLabel?.lineBreakMode = .byWordWrapping
cell.detailTextLabel?.numberOfLines = 0
cell.detailTextLabel?.lineBreakMode = .byWordWrapping
当我输入标题时,一切都很好。但副标题不会扩展行。我还需要做些什么来让字幕增加行高吗?
【问题讨论】:
如果你使用标准的“subtitle”样式的表格视图单元格,你会遇到这个问题:***.com/questions/36587126/…你可以覆盖systemLayoutSizeFittingSize:withHorizontalFittingPriority:verticalFittingPriority:
函数或者设置一个带有约束的自定义样式单元格(和连接标签而不是 textLabel 和 detailTextLabel)
【参考方案1】:
您应该使用一个标签并像这样给出约束,
之后,编写tableview的这两个委托方法。
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat
return UITableViewAutomaticDimension
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
return UITableViewAutomaticDimension
所以,tableview 的高度随着标签文本大小的增加而增加。
【讨论】:
这是最好的答案【参考方案2】:通过使用来自https://***.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()
强制调整布局。
【讨论】:
其他答案只处理正在工作的主标题更改,但这确实在副标题更改时增加了行高。谢谢!【参考方案3】:您需要设置约束,以便单元格可以根据标签的大小自动调整大小。这是关于动态单元格的教程。 https://www.raywenderlich.com/129059/self-sizing-table-view-cells
【讨论】:
以上是关于字幕单元格的 Swift 自动行高的主要内容,如果未能解决你的问题,请参考以下文章
在 UITableView 中使用自动布局进行动态单元格布局和可变行高
Swift UITableView didSelectRowAtIndexPath 错误
根据内容动态调整tableview单元格的高度 - iOS Swift