在 iOS 13 中呈现全屏模式时是不是可以使用滑动关闭?

Posted

技术标签:

【中文标题】在 iOS 13 中呈现全屏模式时是不是可以使用滑动关闭?【英文标题】:Is it possible to use swipe to dismiss while presenting a fullscreen modal in iOS 13?在 iOS 13 中呈现全屏模式时是否可以使用滑动关闭? 【发布时间】:2019-09-05 10:42:39 【问题描述】:

随着 ios 13 中新的默认卡片模式演示,有一个很好的功能是滑动关闭。是否可以在呈现经典的.fullscreen 模态时使用此功能?

我检查了isModalInPresentation 在全屏显示时是否为假。

有什么想法吗?

【问题讨论】:

【参考方案1】:

似乎只有当模态显示为表格时,滑动关闭才有效,如今年的wwdc 所述:

现在,你们都需要做什么来支持 Pull to Dismiss?一般来说,什么都没有。如果您以工作表的形式呈现某些内容,则可以免费将其拉下。

这是有道理的。当您将其呈现为工作表时,UI 使您看起来可以向下滑动模式。当您在全屏上显示它时,用户应该向下滑动页面以关闭它是不直观的。我宁愿在这种情况下使用按钮。

【讨论】:

【参考方案2】:

正如@pepsy 所说,全屏视图并非旨在通过滑动来消除。但是,如果您仍然想尝试,这是我开始的东西

注意:拖动时父控制器不可见有点小故障。

我在视图中添加了一个 UIPanGestureRecognizer 来模拟滑动以消除行为。我还有一个关闭 (X) 按钮,因为滑动手势不像工作表那样直观。

@IBAction func panGestureRecognizerHandler(_ sender: UIPanGestureRecognizer) 

    let translationY = sender.translation(in: sender.view!).y

    switch sender.state 
    case .began:
        break
    case .changed:
        view.transform = CGAffineTransform(translationX: 0, y: translationY)
    case .ended, .cancelled:
        if translationY > 160 
            dismiss(animated: true, completion: nil)
         else 
            UIView.animate(withDuration: 0.2, animations: 
                self.view.transform = CGAffineTransform(translationX: 0, y: 0)
            )
        
    case .failed, .possible:
        break
    @unknown default:
        break
    

【讨论】:

以上是关于在 iOS 13 中呈现全屏模式时是不是可以使用滑动关闭?的主要内容,如果未能解决你的问题,请参考以下文章

从 MasterViewController 呈现的 ModalView 在 iOS 5.1 中不再是全屏

iOS 13.1 Objective-C ModalPresentation 全屏

控制器在 iOS 13 中呈现模式时的 UINavigationBar 高度

在全屏模式演示样式中使用 segue 时如何仍然显示导航栏?

在 swiftUI 中点击列表条目时呈现全屏视图

iOS7相机拍照模式全屏