UIDocumentPicker 导航栏按钮隐藏在 iOS 11

UIDocumentPicker navigation bar buttons are hidden at iOS 11

我注意到我的 UIDocumentPicker 的导航栏中只有 iOS 11 有问题,完成、取消或编辑按钮是不可见的,当用户触摸它时它会出现,即正常状态下的颜色是白色,即使更改 UINavigationBar.appearnce().tintColor,颜色也只会在触摸时改变。

出于未知原因,我发现如果您使用 Objective-C 创建 UIDocumentPicker 的子类并在 viewWillAppear 函数中设置 [UINavigationBar appearance].tintColor = [UIColor black];,然后在 viewWillDisappear,效果很好。

但是,如果您使用 swift 执行相同的步骤,则不会。

UINavigationBarUIBarButtonItem

使用黑色 appearance 的 CustomDocumentPickerViewController
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)

    }

}

我不太喜欢在 viewWillAppearviewWillDisappear 之间设置全局外观。外观 API 只能在应用程序启动时使用。您可以通过将此代码放入 application:didFinishLaunchingWithOptions: 来重置 UIDocumentPickerViewController 的外观而不进行子类化,并且条形按钮将 return 其原始蓝色:

if #available(iOS 11.0, *) {
    UINavigationBar.appearance(whenContainedInInstancesOf: [UIDocumentBrowserViewController.self]).tintColor = nil
}