presented视图控制器dismiss后如何恢复UICollectionView的对应单元格焦点?
presented视图控制器dismiss后恢复UICollectionView原有焦点的解决方案
- 确认
restoresFocusAfterTransition属性设置的位置正确:该属性需要设置在*presenting视图控制器(也就是你的UICollectionViewController实例)*上,不是被弹出的全屏照片视图控制器,多数配置不生效的情况都是误将该属性设置到了presented的控制器上导致的。 - 如果属性配置正确仍然无法自动恢复焦点,可以手动触发焦点更新,你可以选择以下任意一种方式实现:
- 在集合视图控制器的
viewDidAppear生命周期方法中添加焦点更新逻辑
override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) collectionView.setNeedsFocusUpdate() collectionView.updateFocusIfNeeded() }- 在dismiss全屏视图控制器的完成回调中执行焦点更新
fullScreenPhotoVC.dismiss(animated: true) { [weak self] in self?.collectionView.setNeedsFocusUpdate() self?.collectionView.updateFocusIfNeeded() } - 在集合视图控制器的
- 额外排查点:
确认你没有重写preferredFocusEnvironments属性返回其他优先聚焦对象,也没有自定义UIFocusGuide干扰焦点恢复逻辑;如果dismiss后你会刷新集合视图数据,需要确保数据刷新完成后再执行焦点更新代码,避免indexPath失效导致无法定位到之前的单元格。
内容的提问来源于stack exchange,提问作者Jordan H
相关产品推荐
相关产品推荐

