屏幕外(不可见)TableViewCells 不设置动画

Posted

技术标签:

【中文标题】屏幕外(不可见)TableViewCells 不设置动画【英文标题】:Off-Screen (Invisible) TableViewCells Don't Animate 【发布时间】:2019-04-30 15:39:31 【问题描述】:

我目前正在创建带有UITableViewHeaderUITableView。这个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 不设置动画的主要内容,如果未能解决你的问题,请参考以下文章

屏幕外的Android动画视图不起作用

延伸到屏幕外的 HTML 表格

android中可见区域外目标注释的方向

AutoCAD框选不在可见范围内的对象

屏幕外敌人指示器算法

使用 QOpenGLWidget 进行屏幕外渲染的最简单方法