iOS 13中,在呈现全屏模态窗口时是否可以使用滑动手势退出?

5

iOS 13中默认的卡片模态弹出窗口新增了一个很不错的功能,即可通过滑动取消。在使用传统的 .fullscreen 模态弹出窗口时,是否可以使用此功能呢?

我进行了检查,如果在全屏模式下 isModalInPresentation 是false.

有什么想法吗?

2个回答

3

看起来,只有将模态呈现为sheet时,滑动以解除操作才有效,正如今年的wwdc所述:

那么,要支持Pull to Dismiss,你们需要做什么呢?通常不需要做任何事情。如果你将某物呈现为Sheet,则可以免费使用向下拉的功能。

这很有道理。当你将其呈现为sheet时,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
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接