setViewControllers 闪屏黑一下 举例说明
时间: 2024-03-17 14:41:22 浏览: 131
好的,我可以举一个具体的例子来说明。
假设我们有两个视图控制器,分别是 ViewControllerA 和 ViewControllerB。现在我们需要在 ViewControllerA 中通过按钮点击事件切换到 ViewControllerB,但是切换时出现了黑屏闪烁的问题。
通常情况下,我们在切换视图控制器时会使用 setViewControllers 方法来进行操作,示例代码如下:
```swift
let viewControllerB = ViewControllerB()
self.navigationController?.setViewControllers([viewControllerB], animated: true)
```
上面的代码创建了一个新的视图控制器 viewControllerB,并通过 setViewControllers 方法将其添加到导航控制器的视图控制器栈中,实现了从 ViewControllerA 到 ViewControllerB 的切换。
但是,由于视图控制器的加载和显示需要一定的时间,当 viewControllerB 的 view 还没有完全加载出来时,ViewControllerA 的 view 已经被移除了,导致出现了黑屏闪烁的现象。
为了避免这个问题,我们可以先将 viewControllerB 的 view 添加到视图层级中,然后再调用 setViewControllers 方法切换视图控制器,示例代码如下:
```swift
let viewControllerB = ViewControllerB()
self.addChild(viewControllerB)
self.view.addSubview(viewControllerB.view)
viewControllerB.didMove(toParent: self)
self.navigationController?.setViewControllers([viewControllerB], animated: true)
```
上面的代码将 viewControllerB 的 view 添加到当前视图控制器的子视图中,并调用 didMove(toParent:) 方法将 viewControllerB 添加到当前视图控制器中,再通过 setViewControllers 方法切换视图控制器。
这样,在切换视图控制器时,新的视图控制器的 view 已经被添加到视图层级中,就不会出现黑屏闪烁的问题了。
希望以上内容对您有所帮助。如有其它问题,请随时向我提问。
阅读全文