【发布时间】:2018-09-10 22:22:42
【问题描述】:
如何动态更改UITableViewCell 高度?我已经尝试实现以下内容,但由于某种原因,它不起作用。一旦我加载显示此表视图的视图控制器,代码就会崩溃
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
let cell = tableView.cellForRow(at: indexPath) as! AvailableRideCell
return cell.getHeight()
}
这是我的AvailableRideCell 中的getHeight 函数
func getHeight() -> CGFloat {
return self.destinationLabel.optimalHeight + 8 + self.originLabel.optimalHeight + 8 + self.priceLabel.optimalHeight
}
这是optimalHeight函数
extension UILabel {
var optimalHeight : CGFloat {
get {
let label = UILabel(frame: CGRect(x: 0, y: 0, width: self.bounds.width, height: CGFloat.greatestFiniteMagnitude))
label.numberOfLines = 0
label.lineBreakMode = NSLineBreakMode.byWordWrapping
label.font = self.font
label.text = self.text
label.sizeToFit()
return label.frame.height
}
}
}
【问题讨论】:
-
错误是什么?
-
线程 1:致命错误:在展开可选值时意外发现 nil
-
问题出在
as!。我在下面的回答将帮助您找到正确的方向。 -
澄清一下,
tableView.cellForRow(at: indexPath)返回 nil。所以在给定的路径上没有单元格。将其更改为as?并检查 nil 并且此代码可能有效。不过,我强烈建议使用“计算器单元”方法。 -
我将
as!更改为as?并使用 if 检查它是否不为零。它有效,但高度仍然不正确。也许我的getHeight函数有错误?
标签: ios swift uitableview heightforrowatindexpath