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
执行相同的步骤,则不会。
为 UINavigationBar
和 UIBarButtonItem
使用黑色 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)
}
}
我不太喜欢在 viewWillAppear
和 viewWillDisappear
之间设置全局外观。外观 API 只能在应用程序启动时使用。您可以通过将此代码放入 application:didFinishLaunchingWithOptions:
来重置 UIDocumentPickerViewController
的外观而不进行子类化,并且条形按钮将 return 其原始蓝色:
if #available(iOS 11.0, *) {
UINavigationBar.appearance(whenContainedInInstancesOf: [UIDocumentBrowserViewController.self]).tintColor = nil
}
我注意到我的 UIDocumentPicker 的导航栏中只有 iOS 11 有问题,完成、取消或编辑按钮是不可见的,当用户触摸它时它会出现,即正常状态下的颜色是白色,即使更改 UINavigationBar.appearnce().tintColor
,颜色也只会在触摸时改变。
出于未知原因,我发现如果您使用 Objective-C
创建 UIDocumentPicker 的子类并在 viewWillAppear
函数中设置 [UINavigationBar appearance].tintColor = [UIColor black];
,然后在 viewWillDisappear
,效果很好。
但是,如果您使用 swift
执行相同的步骤,则不会。
为 UINavigationBar
和 UIBarButtonItem
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)
}
}
我不太喜欢在 viewWillAppear
和 viewWillDisappear
之间设置全局外观。外观 API 只能在应用程序启动时使用。您可以通过将此代码放入 application:didFinishLaunchingWithOptions:
来重置 UIDocumentPickerViewController
的外观而不进行子类化,并且条形按钮将 return 其原始蓝色:
if #available(iOS 11.0, *) {
UINavigationBar.appearance(whenContainedInInstancesOf: [UIDocumentBrowserViewController.self]).tintColor = nil
}