You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

presented视图控制器dismiss后如何恢复UICollectionView的对应单元格焦点?

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

内容的提问来源于stack exchange,提问作者Jordan H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 18:06:04