在 tvOS 中重新加载数据后,集合视图的最后一个聚焦索引路径丢失

Dan*_*iel 5 uikit ios uicollectionview tvos

在我的 tvOS 应用程序中,我有一个集合视图,我已将其设置remembersLastFocusedIndexPathtrue. 由于这不足以获得这种行为,我还重写了我的方法,UIViewController如下所示:

override weak var preferredFocusedView: UIView? {
    return collectionView
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,直到我由于某些原因开始重新加载集合视图。如果集合视图可见,我调用collectionView.reloadData().

不过,如果我在集合视图不可见时重新加载,例如,当我在点击其中一项后处于详细视图中时,这将不起作用。当我回到网格时,聚焦的索引路径不是我点击的路径。

作为解决方法,我正在管理这种不理想的情况:

  1. 由于重新加载是由来自后端的新数据触发的,因此我仅collectionView.reloadData()在集合视图可见时调用(因为我知道最后一个聚焦索引在这里不会更改)。
  2. 我打电话collectionView.reloadData()viewDidAppear(animated: Bool)为了在用户回来时提供最新的内容。

我怎样才能正确地做到这一点?提前致谢。

Bre*_*eek 3

最近我也遇到这个问题了,我的情况和你差不多。

我也打电话collectionView.reloadData()过去viewDidLoadviewWillAppear

进而

我从

collectionView.reloadData()
Run Code Online (Sandbox Code Playgroud)

collectionView.reloadItemsAtIndexPaths(collectionView.indexPathsForVisibleItems())
Run Code Online (Sandbox Code Playgroud)

它在大多数情况下对我有效,仍有大约 <5% 的机会弄乱最后的焦点索引