在我的应用程序中,主要主题有蓝色导航栏,带有白色栏按钮项目和标题。
我在 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 框架来做到这一点。
问题是这些视图控制器,UIDocumentPickerViewController
不QLPreviewController
符合我在viewWillAppear
方法中设置的新导航栏颜色值。
主视图控制器有蓝色导航栏,但细节视图的导航栏全是白色的。包括栏按钮项。所以按钮是不可见的。看来我在viewWillAppear
方法中设置的值在这里没有效果。我注释掉了appearance
App Delegate 中的值,按钮以默认颜色显示。
与QLPreviewController
视图控制器相同。
我尝试让呈现视图控制器符合UINavigationControllerDelegate
但没有奏效。
我也尝试像这样获取对UIDocumentPickerViewController
导航控制器的引用,documentPickerViewController.navigationController
但它nil
也会返回。
如何在UIDocumentPickerViewController
不更改appearance
值的情况下将颜色应用于?
我在这里上传了一个演示项目。