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



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

override weak var preferredFocusedView: UIView? {
    return collectionView
}

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

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

作为解决方法,我正在管理此非理想方案:

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

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

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

我还在viewDidLoadviewWillAppear中打电话给collectionView.reloadData()

然后

我从

collectionView.reloadData()

collectionView.reloadItemsAtIndexPaths(collectionView.indexPathsForVisibleItems())

它在大多数情况下对我有用,仍然有大约 <5% 的机会搞砸最后一个焦点指数

一种选择是将remembersLastFocusedIndexPath设置为 false ,并实现indexPathForPreferredFocusedViewInCollectionView:以实现相同的行为。

相关内容

  • 没有找到相关文章

最新更新