我有一个UITableView单元格,里面有一个堆栈视图。点击单元格后,数据源会更改并重新加载表格视图。堆栈视图现在内部有更多视图,单元格更大。但是有时当我滚动表格时会出现不稳定的行为。这几乎就像单元格大小计算错误或某些东西(即使它看起来很好)。一旦桌面视图很好并且没有再次执行,直到我点击单元格并且它添加了更多的堆栈视图。
我在桌子视图上使用UITableViewAutomaticDimension
。我试过去除细胞,桌子不会晃动。这是导致问题的堆栈视图的挑衅。
我将估计的行高设置为尽可能接近计算的高度tableView.estimatedRowHeight = 270
。没有影响。我也试过实现委托,它没有任何区别。我尝试了很多组合或尺寸,结果是一样的。我在这里做错了什么?在单元格中堆叠视图只是吮吸?
我认为你正在走上正确的轨道,估计会遇到麻烦。我遇到了这个抽搐问题,几乎每个tableView都有不同的元素大小。通常的工作是“缓存”单元格高度并将其返回委托,例如:
class MyViewController: UIViewController {
fileprivate var cachedCellHeights = [IndexPath: CGFloat]()
//your code here
}
extension MyViewController: UITableViewDelegate {
public func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
cachedCellHeights[indexPath] = cell.frame.height
}
public func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
if let height = cachedCellHeights[indexPath] {
return height
}
return 270
}
}
只要在tableView(_ tableView:UITableView,cellForRowAt indexPath:IndexPath)中配置单元格(即向堆栈视图添加新视图),它就应该工作。
这同样适用于节标题。