在我的应用中,主要主题包含带有白色条形按钮项和标题的蓝色导航栏。
我在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
方法中设置的值似乎没有效果。我在App Delegate中注释掉了appearance
值,按钮显示为默认颜色。
与QLPreviewController
视图控制器相同。
我尝试让呈现视图控制器符合UINavigationControllerDelegate
但是没有用。
我也试过像[{1}}这样引用UIDocumentPickerViewController
的导航控制器,但它也会返回documentPickerViewController.navigationController
。
如何在不更改nil
值的情况下将颜色应用于UIDocumentPickerViewController
?
我上传了一个演示项目here。