【问题标题】:Present commit view controller modally instead of pushing when using 3D Touch Peek & Pop使用 3D Touch Peek & Pop 时以模态方式呈现提交视图控制器,而不是推送
【发布时间】:2023-03-06 19:26:01
【问题描述】:

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

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

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

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

由于以下几个原因,当前行为存在问题:
- 我呈现在全屏上,这样底层的视图控制器仍然在下面可见,模糊了。当它被推动时,无法达到此效果。
- 我使用UIViewControllerTransitioningDelegate 使用自定义过渡来呈现全屏照片,并且它也会在关闭时进行过渡。在推送后关闭它时,它只执行默认的弹出动画而不是我的自定义动画。

【问题讨论】:

    标签: ios swift ios9 3dtouch


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      • 2011-01-20
      • 2020-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-03
      相关资源
      最近更新 更多