iOS 13为模态呈现的视图控制器引入了modalPresentationStyle
.pageSheet
(及其兄弟姐妹.formSheet
)的新设计…
…我们可以通过向下滑动显示的视图控制器来消除这些页面(交互式消除)。尽管新的“拉动关闭”功能非常有用,但可能并不总是令人满意。
问题:我们如何关闭交互式解雇? -请记住,我们保持演示文稿样式不变。
iOS 13为模态呈现的视图控制器引入了modalPresentationStyle
.pageSheet
(及其兄弟姐妹.formSheet
)的新设计…
…我们可以通过向下滑动显示的视图控制器来消除这些页面(交互式消除)。尽管新的“拉动关闭”功能非常有用,但可能并不总是令人满意。
问题:我们如何关闭交互式解雇? -请记住,我们保持演示文稿样式不变。
Answers:
viewController.isModalInPresentation = true
(禁用的交互式.pageSheet
解雇行为是这样的。)
UIViewController
包含一个名为的新属性isModalInPresentation
,必须设置该属性true
以防止交互式解雇。.popover
。false
默认情况下,此属性。来自官方文档:如果为
true
,则UIKit会忽略视图控制器范围之外的事件,并防止在屏幕上交互关闭视图控制器。
func presentationControllerShouldDismiss(_ presentationController: UIPresentationController) -> Bool {
return false
}
UIAdaptivePresentationControllerDelegate
包含了一个称为presentationControllerShouldDismiss
。isModalInPresentation
属性设置为时,才调用此方法false
。提示:不要忘记分配presentationController的委托。
isModalInPresentation
在导航控制器上设置,也可以在导航堆栈中显示的各个视图控制器上设置。后者允许您逐个屏幕地选择是否可以进行交互式解雇。小心搜索控制器,它们优先于单个视图控制器(而不是导航控制器)。我的博客文章中的更多信息: medium.com/@hacknicity/...
viewController.modalInPresentation = YES;
UIImagePickerController
吗?对我们来说,它似乎UIImagePickerController
忽略了它,因此可以通过滑动手势将其消除。也许是iOS 13的错误。
presentationControllerShouldDismiss(_ presentationController: UIPresentationController)
返回false时,将presentationControllerDidAttemptToDismiss(_ presentationController: UIPresentationController)
被调用,因此,如果用户输入了数据,则可以执行添加确认对话框之类的操作。
如果您希望获得与以前的iOS版本(<iOS13)相同的行为(例如全屏模型演示),只需将目标视图控制器的演示样式设置为 UIModalPresentationStyle.fullScreen
let someViewController = \*VIEW CONTROLLER*\
someViewController.modalPresentationStyle = .fullScreen
如果您使用情节提要,请选择segua并选择 Full Screen
形成Presentation
下拉。
如果您只想禁用交互式解雇并将新的演示文稿样式set UIViewController
属性设置isModalInPresentation
为true
。
if #available(iOS 13.0, *) {
someViewController.isModalInPresentation = true // available in IOS13
}
该属性isModalInPresentation
可能会有所帮助。
从文档中:
当您将其设置
true
为时,UIKit会忽略视图控制器范围之外的事件,并防止视图控制器在屏幕上时被交互关闭。
您可以像这样使用它:
let controller = MyViewController()
controller.isModalInPresentation = true
self.present(controller, animated: true, completion: nil)
如果您使用情节提要板来布局UI,我发现在使用导航控制器时禁用此交互式解雇的最佳方法是将属性检查器中导航控制器的显示方式从“自动”更改为“全屏”。导航堆栈中的所有视图控制器将全屏显示,并且将无法被用户关闭。