我有一个带有堆叠视图的UITableView单元格。轻触单元格后,数据源将更改,并且表视图将重新加载。现在,堆栈视图将在内部具有更多视图,并且单元格更大。但是有时候,当我滚动表格时会有不平稳的行为。这几乎像是像元大小计算错误一样(即使看起来不错)。一旦tableview抽动一下就很好了,直到我点击单元格并且它添加了更多的堆栈视图之后,它才再次执行。
我在表格视图上使用UITableViewAutomaticDimension
。我试过删除单元格,但该表不混蛋。绝对是导致问题的堆栈视图。
我将估计的行高设置为尽可能接近计算的高度tableView.estimatedRowHeight = 270
。没关系我也尝试过实现委托,这没有什么区别。我尝试了许多组合或大小,结果是相同的。对我在这里做错的任何想法吗?单元格中的堆栈视图是否很烂?
答案 0 :(得分:1)
我认为您在关于估计的RowHeight引起麻烦的正确道路上。我遇到了这个问题,几乎在每个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)中配置单元格(即向堆栈视图添加新视图),它就应该起作用。
节头同样如此。