新的iOS 13模态演示:演示控制器不会向下移动


11

在iOS 13中以模态方式呈现UIViewControllers时,我的行为很怪异。我在iOS 13上所见过的新呈现方式如下所示:

呈现视图控制器出现在呈现视图控制器的后面。它也向下移动以模仿“堆栈”

呈现视图控制器出现在呈现视图控制器的后面。 它也向下移动以模仿“堆栈”

同时,当通过我的应用程序展示视图控制器时,我不断得到这种效果:

呈现新的视图控制器时,呈现的视图控制器完全不动

呈现新的视图控制器时,呈现的视图控制器完全不动

我使用以下代码介绍此视图控制器:

let controller = storyboard?.instantiateViewController(withIdentifier: "tutorial") as! TutorialController
controller.modalPresentationStyle = .pageSheet
controller.modalTransitionStyle = .coverVertical
present(controller, animated: true, completion: nil)

这是我的问题: 我想知道为什么会这样,是否有办法以普通的iOS 13样式呈现视图控制器(呈现的视图控制器向后移动)。

提前致谢!


作为测试,请尝试注释controller.modalTransitionStyle = .coverVertical甚至注释controller.modalPresentationStyle = .pageSheet(尽管如果此代码也在iPad上运行,则将需要呈现样式)。
rmaddy19年

我把它注释掉了,但是它什么都没变:(
CentrumGuy

Answers:


3

原来问题是我的视图控制器层次结构。通过将呈现视图控制器设置为我的应用程序的根视图控制器,我能够解决此问题。首先,我通过调用将后台控制器设置为根视图控制器

window.rootViewController = self

然后使用我之前的代码

let controller = storyboard?.instantiateViewController(withIdentifier: "tutorial") as! TutorialController
controller.modalPresentationStyle = .pageSheet
controller.modalTransitionStyle = .coverVertical
present(controller, animated: true, completion: nil)

我介绍了视图控制器。感谢所有尝试提供帮助的人!


我有同样的问题。您在哪里设置了rootViewController标志?就在segue之前?
帕维尔Zgoda酒店-Ferchmin

我提出“后台控制器”时进行设置。让我们称它们为控制器1、2和3可以使事情变得更容易(1是后面最远的控制器,2在3之后的后台,而3是前面的控制器,也就是Tutorial Controller)。当前,我们正在看控制器1。不是将控制器1上的present()调用到当前控制器2,而是将控制器2设置为根视图控制器。这基本上摆脱了控制器1,并且我们的窗口现在在其层次结构中仅具有控制器2。现在,您可以通过在控制器2上调用present()来正常显示控制器
3。– CentrumGuy

当然,这对我有用,但是会导致各种不同的问题,例如消失的状态栏或在搜索过程中进行动画剪辑,我也不认为这是安全的。必须有一个更好的解决这个...
帕维尔Zgoda酒店,Ferchmin

这些问题什么时候发生?当您调用present()或设置根视图控制器时?状态栏消失的原因可能是,状态栏为黑色文本,并且在present()出现时导致其与应用程序背景融合在一起时显示在黑色背景上。
CentrumGuy

1
我创建了一个简单的演示项目。您可以在这里查看它:github。所有逻辑都在Controller1.swift中。让我知道这是否有帮助!
CentrumGuy

1

我认为,vc.modalPresentationStyle = .fullScreen如果没有UINavigationController,可以使用解决此问题,否则可以按以下方式使用这些代码:

let navigationController = UINavigationController(rootViewController: vc) 
navigationController.modalPresentationStyle = .fullScreen 
present(vc, animated: true)

因为使用iOS 13这是一项新功能,Apple已将View Controller的默认演示样式从iOS 12中的全屏模式更改为模式表


2
.fullScreen使它看起来像旧的iOS 12演示文稿,在该演示文稿中根本看不到其背后的控制器。那不是我要的。
CentrumGuy

@CentrumGuy,您可能会看到“ media.com/better-programming/… ” 链接,对此进行了详细说明。
Apple已将默认的

1
我知道Apple更改了iOS 13中的默认呈现样式。但是,当我在应用中呈现视图控制器时,呈现控制器不会像在iOS 13上的其他任何地方一样移动。以当前视图控制器显示在最上方视图控制器后面的方式显示图片。我想让我的照片像第一张照片一样显示
-CentrumGuy

我很高兴能为您提供帮助!
glotcha

1

以编程方式:

let vc = UIViewController()
vc.modalPresentationStyle = .fullScreen //or .overFullScreen for transparency
self.present(vc, animated: true, completion: nil)

从情节提要中:

在此处输入图片说明

而已。完全不需要使用根控制器或窗口。

供参考,请访问本文


0

我们可以在“检查器”工具栏中进行更改。要实现这一目标:转至Inspector收费栏的第五部分,然后将Presentation字段更改为Full Screen。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.