如何在 iOS 13 中查看和弹出视图控制器

Posted

技术标签:

【中文标题】如何在 iOS 13 中查看和弹出视图控制器【英文标题】:how to peek and pop view controllers in iOS 13 【发布时间】:2019-08-11 16:51:10 【问题描述】:

Peek and pop (UIViewControllerPreviewing) 在 ios 13 中已弃用。它将被新的 contextMenuInteraction 东西取代。

那么如何直接替换 peek 和 pop 呢?换句话说,如何将目标视图控制器显示为预览(peek),然后让用户从那里弹出到实际目标视图控制器的呈现?

这是我正在尝试的,但它与旧的 peek and pop 不同:

override func viewDidLoad() 
    super.viewDidLoad()
    let inter = UIContextMenuInteraction(delegate: self)
    self.view.addInteraction(inter)


func contextMenuInteraction(_ inter: UIContextMenuInteraction, 
    configurationForMenuAtLocation loc: CGPoint) -> UIContextMenuConfiguration? 
        let config = UIContextMenuConfiguration(identifier: "preview" as NSString, 
            previewProvider:  SecondViewController() , actionProvider: nil)
        return config


func contextMenuInteraction(_ interaction: UIContextMenuInteraction, 
    willCommitWithAnimator animator: UIContextMenuInteractionCommitAnimating) 
        // animator.preferredCommitStyle = .pop
        if let vc = animator.previewViewController 
            animator.addCompletion 
                self.present(vc, animated: true, completion: nil)
            
        

在这个简单的测试中,第一个视图控制器的整个背景视图变成了一个我们可以长按查看第二个视图控制器预览的地方。发生的情况是我们确实看到了预览,并且用户可以点击它。但随后预览被解除,然后第二个视图控制器出现。

这不是偷看和流行。 Peek and pop 意味着预览成为第二个视图控制器。它应该成长成为演示文稿(“流行音乐”)。

我尝试将动画师的preferredCommitStyle 设置为.pop(如注释掉的行中所示),但没有任何区别。

有人知道吗?

EDIT Apple 自己的应用程序也不能正确执行此操作。在照片应用程序中,如果您长按一张照片以获取上下文菜单和预览,如果您点击预览,它会被关闭,然后推送的图像会突然出现。此外,如果您随后尝试返回(点击返回按钮),则会崩溃。

【问题讨论】:

对于通过谷歌搜索“ios 13 peek and pop”的其他人来说,在测试阶段,委托中的“提交”功能已重命名为 func contextMenuInteraction(_:willPerformPreviewActionForMenuWith:animator:) 这里有一个很好的指导如何实现它kylebashour.com/posts/ios-13-context-menus 【参考方案1】:

这个问题是在 iOS 13 测试版开发的早期阶段提出的。我提交了错误报告。事实证明,我所看到的一个错误,Apple 知道这一点。在 iOS 13 beta 开发的后期阶段,实现了正确的.pop 行为,实际上是默认的。因此,它现在的外观和行为就像早期系统中的 peek and pop 一样。

所以,在我的问题中,我说:

这不是偷看和流行。 Peek and pop 意味着预览成为第二个视图控制器。它应该成长成为演示文稿(“流行音乐”)。

这就是它现在所做的。错误已修复,问题也已解决(我已关闭与 Apple 的错误报告)。

【讨论】:

以上是关于如何在 iOS 13 中查看和弹出视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

如何在ios中自定义推送和弹出动画时将视图传递给另一个控制器? [关闭]

如何在 ios 的 swreveal 视图控制器中推送弹出窗口?

如何同时关闭和弹出视图控制器

如何添加模糊背景和弹出视图?

无法在主视图控制器和弹出视图之间传递消息

使用导航控制器推送和弹出视图控制器:实现