PHPickerViewController切换相册时取消按钮变白不可见问题求助
解决PHPickerViewController取消按钮变白问题
这个问题源于PHPickerViewController的导航栏会继承应用全局的导航栏外观配置,切换到相册分段视图时,导航栏背景色变化但按钮颜色未同步适配,导致白色按钮在浅色背景下难以辨认。以下是几种可行的解决方法:
方法一:直接设置导航栏按钮颜色
在present PHPickerViewController之前,直接指定其导航栏的tintColor,确保按钮颜色在任何背景下都清晰可见:
var config = PHPickerConfiguration(photoLibrary: .shared()) config.selectionLimit = 50 config.filter = .images let vc = PHPickerViewController(configuration: config) vc.delegate = self // 设置导航栏按钮颜色(自动适配深浅模式) vc.navigationBar.tintColor = .label present(vc, animated: true, completion: nil)
方法二:使用UINavigationBarAppearance定制完整样式(iOS 13+)
对于iOS 13及以上版本,推荐使用UINavigationBarAppearance精细化控制导航栏样式,确保按钮与背景色的适配:
var config = PHPickerConfiguration(photoLibrary: .shared()) config.selectionLimit = 50 config.filter = .images let vc = PHPickerViewController(configuration: config) vc.delegate = self if #available(iOS 13.0, *) { let appearance = UINavigationBarAppearance() // 适配深浅模式的默认背景配置 appearance.configureWithDefaultBackground() // 设置按钮颜色 appearance.tintColor = .systemBlue // 将样式应用到导航栏的常规和滚动状态 vc.navigationBar.standardAppearance = appearance vc.navigationBar.scrollEdgeAppearance = appearance } else { // iOS 12及以下版本直接设置tintColor vc.navigationBar.tintColor = .blue } present(vc, animated: true, completion: nil)
方法三:检查全局导航栏配置
如果应用全局通过UINavigationBar.appearance()设置了导航栏样式,可能会与PHPickerViewController的默认样式冲突。若存在类似以下的全局配置,只需在present前单独设置PHPicker的导航栏样式即可覆盖全局设置:
// 可能引发冲突的全局配置示例 UINavigationBar.appearance().tintColor = .white
内容的提问来源于stack exchange,提问作者Mr_Bull3t
相关产品推荐
相关产品推荐

