使用 3D Touch Peek & Pop 时以模态方式呈现提交视图控制器而不是推送

Present commit view controller modally instead of pushing when using 3D Touch Peek & Pop

我有一个应用程序,允许用户查看嵌入在 UINavigationController 中的 UICollectionViewController 中的照片。当用户点击查看照片时,我会在全屏(不是默认的全屏)上以模态方式呈现一个新的视图控制器。我现在想实现一个 3D Touch 提交(弹出)视图控制器,使其显示与用户只需点击照片时完全一样。问题是,当弹出全屏照片时,iOS 在幕后将这个视图控制器推送到堆栈上——导航栏仍然可见,并且它添加了一个返回按钮以返回到上一个屏幕。我不想那样,我希望提交视图控制器以模态方式呈现。

我注意到如果删除导航控制器,iOS 将以模态方式呈现提交视图控制器,而不是推送。但是我无法删除我的导航控制器,它仍然只是全屏显示而不是全屏。

如何更改默认行为,以便在原始视图控制器嵌入导航控制器时,提交视图控制器以全屏模式呈现,而不是推送到堆栈上?

当我在 previewingContext:commitViewController: 中配置提交视图控制器时,我尝试将 modalPresentationStyle 设置为 .OverFullScreen。这似乎没有任何区别。

当前的行为是一个问题,原因如下:
- 我在整个屏幕上呈现,以便底层视图控制器在下方仍然可见,但模糊了。当它被推动时,这个效果就无法实现。
- 我使用 UIViewControllerTransitioningDelegate 使用自定义过渡呈现全屏照片,它也会在关闭时过渡。推送后关闭它时,它只执行默认的弹出动画而不是我的自定义动画。

想通了!只需将 modalPresentationStyle 设置为 .OverFullScreen,非常重要的是,不要在 previewingContext:commitViewController: 中调用 showViewController,而是调用 presentViewController。简单的。不敢相信我在发布之前没有看到。 :)