自定义tableViewCell动态高度不会根据约束进行更新是因为在使用自动布局时,需要正确设置约束以确保cell的高度可以根据内容自动调整。
解决这个问题的方法是:
以下是一个示例代码:
class CustomTableViewCell: UITableViewCell {
@IBOutlet weak var label: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
// 设置label的行数为0,以支持多行文本
label.numberOfLines = 0
}
override func layoutSubviews() {
super.layoutSubviews()
// 更新label的preferredMaxLayoutWidth,确保自动布局可以正确计算label的高度
label.preferredMaxLayoutWidth = label.frame.size.width
}
}
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
// 设置tableView的rowHeight为UITableViewAutomaticDimension
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 44 // 设置一个估算的行高,可以提高性能
// 注册自定义的tableViewCell
tableView.register(UINib(nibName: "CustomTableViewCell", bundle: nil), forCellReuseIdentifier: "CustomCell")
}
// UITableViewDataSource方法
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10 // 假设有10个cell
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as! CustomTableViewCell
cell.label.text = "这是一段很长的文本,可能会换行,需要根据内容自动调整cell的高度。"
return cell
}
// UITableViewDelegate方法
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
}
在这个示例中,我们创建了一个自定义的tableViewCell,其中包含一个UILabel来显示文本内容。在awakeFromNib方法中,我们将UILabel的行数设置为0,以支持多行文本。在layoutSubviews方法中,我们更新UILabel的preferredMaxLayoutWidth,确保自动布局可以正确计算UILabel的高度。在tableView的代理方法中,我们设置rowHeight为UITableViewAutomaticDimension,并实现heightForRowAt方法返回UITableViewAutomaticDimension。
这样,当tableView加载时,会根据UILabel的内容自动计算cell的高度,并根据约束进行更新。
领取专属 10元无门槛券
手把手带您无忧上云