3

在我的应用程序中,主要主题有蓝色导航栏,带有白色栏按钮项目和标题。

在此处输入图像描述

我在 App Delegate 中设置了这样的颜色值。

UINavigationBar.appearance().isTranslucent = false
UINavigationBar.appearance().tintColor = .white
UINavigationBar.appearance().barTintColor = AppColors.blue
UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]

但是在某些视图控制器中,我需要反转这些样式(带有蓝色按钮和标题的白色导航栏)。

在此处输入图像描述

所以在那些视图控制器中,我只是在viewWillAppear方法中设置了新值。

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    navigationController?.navigationBar.tintColor = AppColors.blue
    navigationController?.navigationBar.barTintColor = .white
    navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: AppColors.blue]
}

从其中一个视图控制器中,我必须显示一个UIDocumentPickerViewController来选择一个文档文件。

let documentPickerViewController = UIDocumentPickerViewController(documentTypes: [String(kUTTypePDF)], in: .import)
documentPickerViewController.delegate = self
present(documentPickerViewController, animated: true)

用户也可以预览它。我使用 QuickLook 框架来做到这一点。

问题是这些视图控制器,UIDocumentPickerViewControllerQLPreviewController符合我在viewWillAppear方法中设置的新导航栏颜色值。

在此处输入图像描述

主视图控制器有蓝色导航栏,但细节视图的导航栏全是白色的。包括栏按钮项。所以按钮是不可见的。看来我在viewWillAppear方法中设置的值在这里没有效果。我注释掉了appearanceApp Delegate 中的值,按钮以默认颜色显示。

在此处输入图像描述

QLPreviewController视图控制器相同。

在此处输入图像描述

在此处输入图像描述

我尝试让呈现视图控制器符合UINavigationControllerDelegate但没有奏效。

我也尝试像这样获取对UIDocumentPickerViewController导航控制器的引用,documentPickerViewController.navigationController但它nil也会返回。

如何在UIDocumentPickerViewController不更改appearance值的情况下将颜色应用于?

我在这里上传了一个演示项目。

4

0 回答 0