我有一个表格视图,其中包含12种以上不同类型的单元格。我正在使用自动调整大小,并且所有单元格的约束均已正确设置。一切都可以在iPhone模拟器上完美运行,但是在iPad模拟器上,一切都很好,直到
一旦我返回/重新打开应用程序,表格视图就会自动滚动到一个随机位置,并且,一旦应用程序进入后台,cellForRowAtIndexPath就会被调用多次(仅用于显示周围/包括显示的索引)单元格的索引),看起来表格视图会在应用程序进入后台后自动自动滚动。
我100%肯定在任何地方都不会调用tableview.reloadData(),也未实现applicationDidEnterBackground。
想知道是否有人遇到过同样的问题,潜在的原因是什么?我用XCode 9.3和iOS 9.3和11.3的iPad模拟器进行了测试。
该情况如下所示
答案 0 :(得分:1)
我弄清楚了原因,这是由于估计的高度不准确,并且tableview做一些奇怪的事情。 IOS 8 UITableView self-sizing cells jump/shift visually when a new view controller is pushed
我通过缓存单元格的高度来解决该问题,如果未缓存高度,则在估计的HeightForRow中返回UITableViewAutomaticDimension
;如果已缓存高度,则返回var cellEstimatedHeightCache = [Int: CGFloat]()
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
guard let height = cellEstimatedHeightCache[indexPath.row] else {
return UITableViewAutomaticDimension
}
return height
}
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
cacheCellHeight(row: indexPath.row, height: cell.frame.size.height)
}
private func cacheCellHeight(row: Int, height: CGFloat) {
cellEstimatedHeightCache[row] = height
}
。
伪代码-Swift 4:
<div class="container">
<kendo-grid
[kendoGridBinding]="users"
[pageSize]="10"
[pageable]="true"
[sortable]="true"
[filterable]="true"
[groupable]="true"
[height]="510">
<kendo-grid-column field="userId" title="Id" [width]="60"></kendo-grid-column>
<kendo-grid-column field="userName" title="Name" [width]="120"></kendo-grid-column>
<kendo-grid-column field="userAddress" title="Address" [width]="100"></kendo-grid-column>
<kendo-grid-column field="userStatus" title="Status" [width]="130"></kendo-grid-column>
</kendo-grid>
</div>