I notice a problem in my UIDocumentPicker's navigation bar at iOS 11 only, the done, cancel, or edit buttons are invisible, and when the user touch it it appears i.e. The color at normal state is white, even when changing the UINavigationBar.appearnce().tintColor
, The color only changed on touch.

- 314,917
- 42
- 532
- 579

- 333
- 1
- 3
- 15
-
`UINavigationBar.appearance().tintColor = tintColor` have to work. – Vyacheslav Nov 26 '17 at 13:22
-
I have the exact same problem! The buttons are not displayed but are working when tapped.. – franswa Dec 17 '17 at 20:12
3 Answers
For unknown reason I figured out that if you make a subclass of UIDocumentPicker using Objective-C
and set the [UINavigationBar appearance].tintColor = [UIColor black];
in viewWillAppear
func, and reset it to your defaults in the viewWillDisappear
, it works well.
But if you do the same steps using swift
it wont.

- 333
- 1
- 3
- 15
I'm not a big fan of setting the global appearance between viewWillAppear
and viewWillDisappear
. The appearance API should be used at application start only. You can just reset the appearance for UIDocumentPickerViewController
only without subclassing by putting this code in application:didFinishLaunchingWithOptions:
and the bar buttons will return the their original blue:
if #available(iOS 11.0, *) {
UINavigationBar.appearance(whenContainedInInstancesOf: [UIDocumentBrowserViewController.self]).tintColor = nil
}

- 863
- 10
- 9
-
it's worked..can help me i have same problem on UIactivity view controller.. what can i do. – Maulik shah Apr 11 '19 at 09:21
-
Use CustomDocumentPickerViewController with black appearance
for UINavigationBar
and UIBarButtonItem
import UIKit
class CustomDocumentPickerViewController: UIDocumentPickerViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
UINavigationBar.appearance().tintColor = UIColor.black
UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.black], for: .normal)
}
override func viewWillDisappear(_ animated: Bool) {
UINavigationBar.appearance().tintColor = UIColor.white // your color
UIBarButtonItem.appearance().setTitleTextAttributes(nil, for: .normal)
super.viewWillDisappear(animated)
}
}

- 526
- 4
- 13

- 605
- 6
- 13