iOS11 UITableview reloadRowsAtIndexPaths故障

时间:2017-10-11 03:34:15

标签: ios uitableview autolayout ios11

任何人都可以帮助我理解或解决iOS11中的这个UITableView故障。我已经设法在一个相当简单的测试用例中重现了我的问题。

https://github.com/trapper-/iOS11-tableview-glitch

当重新加载靠近tableview底部的单元格时,重新加载的单元格将开始奇怪地滚动,其他单元格开始移动并跳转。

重新加载多个单元格时会变得更糟,但我不想让这个简单的例子复杂化。

  • 编辑:此问题仅发生在iOS11中,在iOS10和iOS中运行良好iOS12。所以 你需要下载iOS11模拟器来测试Xcode 10

3 个答案:

答案 0 :(得分:5)

这应该有所帮助:

[UIView performWithoutAnimation:^{
    [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}];

答案 1 :(得分:3)

如果我这样使用它,它的工作。

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 100;
}

答案 2 :(得分:0)

请尝试设置您的表格视图estimatedRowHeight(在viewDidLoad方法中): self.tableView.estimatedRowHeight = 100;

默认情况下tableView.rowHeight设置为UITableViewAutomaticDimension,但您需要设置estimatedRowHeight 从apple - “要启用自调整表格视图单元格,必须将表格视图的rowHeight属性设置为UITableViewAutomaticDimension。您还必须为estimatedRowHeight属性赋值。一旦设置了这两个属性,系统就会使用自动布局计算行的实际高度。“

你可以看看: https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/WorkingwithSelf-SizingTableViewCells.html