iOS 11中UITableView滚动故障(由reloadData表和mopub placer引起的内容偏移跳跃)

11
当我升级到iOS 11后,我的应用程序的表格视图突然无法平稳滚动。每当我滚动(或reloadData)时,表格视图就会突然跳到一个随机的内容偏移位置。
我使用mopub的placer将广告插入表格视图中,我注意到每当应用程序执行[tableview reloadData]时,表格视图的滚动偏移量就会出错并跳到一个随机位置。

当您使用UITableViewAutomaticDimension时,似乎存在一个错误。请参见 此答案 和其他答案。 - mfaani
1个回答

44
升级到iOS 11一个月后,我发现了这个讨论:UITableView reload methods show behavior regression,位于苹果开发者论坛上。
结果表明,这种奇怪的行为是由[tableview reloadData]引起的,并且mopub ad placer总是调用[tableview reloadData]。因此,带有mopub广告放置程序的tableview将遭受最多的问题。
为了解决这个问题,只需要设置: self.tableView.estimatedRowHeight = 0; self.tableView.estimatedSectionHeaderHeight = 0; self.tableView.estimatedSectionFooterHeight = 0; 所有的滚动和reloadData行为都会像iOS 10一样真正流畅。

1
这个属性被称为estimatedRowHeight并非没有原因,你需要给出最接近单元格高度的估计值。在我的情况下,0是完全错误的,因为我的单元格高度相当大,而且故障仍然存在,所以我将它设置为100,问题得到了解决。我认为上面的答案tableView.estimatedRowHeight = 0之所以有效,是因为单元格的高度恰好很小。 - Au Ris
3
如果我的单元格大小是动态的,而我想要保持自动单元格高度,该怎么办? - yigitserin
1
@user3179249,请查看此问题和已接受的答案 https://dev59.com/nV4c5IYBdhLWcg3wLXga - Hot'n'Young
1
以上答案很好用。感谢您节省了我的时间。 - Dnyaneshwar Wakchaure
1
将这三个设置为零对我解决了问题,而且我只使用了自己的页眉和页脚(没有 mopub 广告放置器)。虽然我的页眉和页脚因部分而异,但对于视图来说始终是相同的。然而,当更改中间部分的行数(由于该部分中的按钮)时,向上滚动会导致跳跃。所以,加 1。 - Jeff
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接