屏幕外(不可见)TableViewCells 不设置动画
Posted
技术标签:
【中文标题】屏幕外(不可见)TableViewCells 不设置动画【英文标题】:Off-Screen (Invisible) TableViewCells Don't Animate 【发布时间】:2019-04-30 15:39:31 【问题描述】:我目前正在创建带有UITableViewHeader
的UITableView
。这个UITableViewHeader
是我UITableView
第一部分的HeaderView,它可以展开或折叠。它显示过滤器以缩小 UITableView
中显示的内容。
目前一切都很好,扩展UITableViewHeader
效果很好,但是一旦我折叠UITableViewHeader
(我将两个底部约束设置为真和假以折叠UITableViewHeader
),那些不是一开始可见(所以那些不在屏幕上的)没有动画,只要我按下按钮,它们就会“到位”。
我现在想知道是否有可能确保这些单元格也跟随动画,因此它们会从屏幕底部下方“向上滑动”,而不是直接落入到位。动画需要 0.25 秒,所以比方说,细胞在 0.25 秒后可见。
有什么想法吗?
【问题讨论】:
你考虑过使用tableView.scrollToRow(ar: IndexPath (row: 0, section: 0), at: .top, animated: true)
吗?注意到冲突的动画将被取消 - 最新开始的 IIRC 将覆盖任何已经开始的动画。
我现在来看看这个。感谢您的想法。
编辑scrollToRow(at: IndexPath
...
它不起作用。我的意思是,它可能会滚动到第一行,但现有的“动画”保持不变。我的意思是,我想要的动画没有出现。
另外,与我在this post 中遇到的行为完全相同。
【参考方案1】:
如果没有看到任何代码或捕获问题的 gif,很难说。
当您说单元格“在屏幕外”时,它们是否被隐藏、它们的帧是否已更新或是否应用了任何平移变换?
在折叠 UITableViewHeader
之前,单元格必须通过修改它们的框架来移出屏幕(例如,它们的 y
等于视图的高度,将它们放在底部,在您的可见视图下方)或应用了翻译转换。然后,当您折叠 UITableViewHeader
时,您必须通过修改它们的位置来“向上滑动”它们 - 通过更改它们的帧原点或通过应用平移变换(或身份变换,取决于您开始的变换) .
请记住,在不了解您问题的具体细节的情况下,此建议有点像在黑暗中拍摄。
【讨论】:
离屏我的意思是例如有 20 个单元格,但只有 8 个单元格适合当前可见视图,因此其余 12 个单元格不在屏幕上。前 8 个动画使用更新的底部锚点进行动画处理,因此它们向上移动或它们的 y 位置沿 0.25 秒更新。其他 12 个没有,而是立即到位。 可能会有所帮助:this post 与我的问题完全相同,并且有一个 GIF。以上是关于屏幕外(不可见)TableViewCells 不设置动画的主要内容,如果未能解决你的问题,请参考以下文章