当我重新加载部分时,没有动画的 Tableview 仍然抖动
Posted
技术标签:
【中文标题】当我重新加载部分时,没有动画的 Tableview 仍然抖动【英文标题】:Tableview with no animation still jitters when I reload section 【发布时间】:2018-04-20 13:46:34 【问题描述】:在 tableview 的部分。我有一些可选择的行。
在该部分的标题中,我有一个Deselect All
按钮。
deselect all
按钮需要在选择行时启用,如果未选择行则禁用。
通过读取一个布尔值来启用/禁用该按钮。我在那个布尔值上有一个didSet
:
var shouldEnableDeselectButton = false
didSet
if oldValue != shouldEnableDeselectButton
DispatchQueue.main.async
self.notesTable.reloadSections([self.indexofFilter], with: .none)
如果我在didSet
中什么都不做,那么它只能通过出列/向上或向下滚动并离开屏幕来更新。
见下文:
如果我这样做self.notesTable.reloadSections([someSection], with: .none)
,那么它不再需要节标题出列。然而,如果我选择 last 行之一,那么它会严重抖动:
见下文:
我在网上查了一下,找到了Reload tableview section without scroll or animation提到的解决方案,但它们仍然抖动
【问题讨论】:
你为什么添加这个DispatchQueue.main.async
?您是否从后台线程刷新它?
没有充分的理由。解决这个问题只是徒劳的尝试
为什么在检查/取消检查时需要重新加载表部分?为什么不直接调用 reloadData() 呢?它只导致重新加载可见的行,因此它非常快速且没有动画。
所以你正在做self.notesTable.reloadSections
只是为了启用/禁用取消选择所有按钮?我要做的是对标题部分视图进行强烈引用,我可以在该视图上设置一个属性以启用/禁用,而无需刷新整个部分...
@Ladislav 谢谢。所以改变那个视图的属性,会改变它吗?我的意思是它不需要任何layoutIfNeeded()
或任何形式的reload()
?如果我可能会问你以前做过这个,或者你只是认为它应该工作?
【参考方案1】:
需要两件事:
获取 headerView 的引用/指针。例如。 this 回答。
将您的按钮作为属性。我最初只是将它作为子视图。这还不够!
为此,我将 sectionHeader 设为 UITableViewHeaderFooterView
子类,然后将按钮添加为属性。
然后我可以简单地更改按钮的isEnabled
属性。
【讨论】:
以上是关于当我重新加载部分时,没有动画的 Tableview 仍然抖动的主要内容,如果未能解决你的问题,请参考以下文章
重新加载 UITableView 而不重新加载 Section Header