在 UITableViewController 上以模态方式呈现 UIPageViewController 时,导航栏和工具栏上的图形伪像

Graphical artefact on navigation bar and toolbar when presenting UIPageViewController modally over a UITableViewController

我的应用只是 UITableViewController 嵌入 UINavigationController。在主表视图控制器 viewDidLoad() 方法中,我检查 UserDefaults 的布尔键以查看它是否是第一次启动。如果是这样,我会模态地提供一个 UIPageViewController 用于教程和入职培训。

self.present(tutorialViewController, animated: true, completion: nil)

然而,在教程屏幕下方,我的主视图控制器 navigationBartoolBar 变为浅灰色,直到与 tableview 交互,然后它们立即变回默认的半透明外观我想要的。我不知道是什么原因造成的。我尝试将 modalPresentationStyle 设置为 .overCurrentContext 但这没有帮助。

我还收到警告,不鼓励在分离的视图控制器上呈现视图控制器。如果我按如下方式显示此警告,该警告就会消失:

self.parent?.present(tutorialViewController, animated: true, completion: nil)

然而,这看起来很乱,图形伪像仍然存在。

我是不是从错误的地方或以错误的方式呈现 tutorialViewController?教程屏幕似乎按预期工作 - 只是底层导航栏和工具栏的颜色短暂错误。我需要在 tableview 上显示它,因为教程的最后一页是透明的,带有模糊效果,以帮助查看应用程序的工作原理。

我根据一些讨论找到了解决方案 here

我本应在 viewDidAppear() 中展示模态视图控制器 viewDidLoad() 方法。

我还为我的 tableview 设置动画以淡入,因此它在教程屏幕之前是不可见的。相反,我现在使用一个阻塞视图设置为与我的教程视图控制器相同的背景颜色。在 viewDidLoad() 我这样做:

let blockingView = UIView()
blockingView.frame = UIApplication.shared.keyWindow?.frame
UIApplication.shared.keyWindow?.addSubview(blockingView)

这意味着阻挡视图出现在导航控制器的前面。在 viewDidAppear().

中介绍教程之前,我淡化并删除了 blockingView