【问题标题】:Animation in UITableViewCell breaks after cell deallocationUITableViewCell 中的动画在单元格释放后中断
【发布时间】:2022-08-13 21:09:18
【问题描述】:

我在单元格中有一个扩展视图。在我按下显示更多按钮后,它工作正常。但是当我向下滚动并且该单元格从内存中释放然后我再次点击显示更多按钮时,动画会中断。我该如何解决?

Project repo on Github

折叠视图:

扩展视图:

滚动前的调试器视图:

在单元格释放后(滚动后)像这样中断,在第二个单元格后面展开:

  • 您需要edit 您的问题以minimal reproducible example 的形式包含所有相关代码,以便使问题成为主题。
  • 你想让你的“展开单元格”覆盖它下面的单元格?或者,您是否希望它扩展并“将其他单元格向下推”?
  • 只是为了扩展和覆盖,而不推动其他单元格,它工作正常,直到您向下滚动并从内存中释放单元格,然后它不再像以前那样扩展。

标签: ios swift uitableview uikit


【解决方案1】:

根据您的代码和评论...

而不是扩大你的细胞,您正在设置 clipsToBounds = false 并扩展单元格的内容,允许它们延伸到单元格的边界之外。

当您滚动 UITableView 时,单元格 - 当然 - 根据需要添加/删除。但是当它们被重新添加时,“z-order”会发生变化(因为,对于“标准”表视图的使用,这并不重要)。

因此,在向下滚动然后返回,然后点击“显示更多”按钮后,该单元格可能(并且通常是)位于较低的 z 顺序...因此其扩展的“越界”内容被隐藏在后面它下面的单元格。

如果您想坚持这种方法(而不是扩展单元格本身),您可以尝试实现scrollViewDidScroll 以确保单元格位于“顶部”:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    
    // make sure the first row is visible (not scrolled off the top of the view)
    let pth = IndexPath(row: 0, section: 0)
    if let a = tableView.indexPathsForVisibleRows,
       a.contains(pth),
       let c = tableView.cellForRow(at: pth) {
        // bring it to the front -- i.e. the top of the z-order
        tableView.bringSubviewToFront(c)
    }
    
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    相关资源
    最近更新 更多