如何单独修改UIImagePickerController中取消按钮的tintColor?
设置UIImagePickerController中按钮的tintColor
方法一:直接修改实例的导航栏颜色(推荐)
这是最可靠的方式,仅针对当前UIImagePickerController实例生效,不会影响其他控制器:
let imagePicker = UIImagePickerController() // 设置取消按钮(及导航栏内其他按钮)的颜色 imagePicker.navigationBar.tintColor = .blue // 按需设置代理、资源类型等 imagePicker.delegate = self imagePicker.sourceType = .photoLibrary present(imagePicker, animated: true)
方法二:全局设置所有UIImagePickerController的导航栏颜色
如果需要全局统一修改所有UIImagePickerController的按钮颜色,可针对iOS版本调整外观代理的写法:
// iOS 13+ if #available(iOS 13.0, *) { UINavigationBar.appearance(whenContainedInInstancesOf: [UIImagePickerController.self]).tintColor = .blue } else { // iOS 12及以下(兼容旧版API) UINavigationBar.appearance(whenContainedIn: UIImagePickerController.self, nil).tintColor = .blue }
为什么你之前的代码没生效?
whenContainedInInstancesOf: 失效通常是因为UIImagePickerController的内部视图层级在部分iOS版本中有所变化,系统内部的导航栏可能被嵌套在其他容器控制器中,导致外观代理的匹配条件不触发。直接修改实例的导航栏属性则不受层级影响,因此更稳定。
补充说明
- UIImagePickerController的取消按钮属于导航栏按钮,修改
navigationBar.tintColor会直接改变它的颜色。 - 如果是相机模式(
sourceType = .camera),界面底部的拍照/录像按钮等不属于导航栏控件,需要通过自定义cameraOverlayView的方式修改,这不在当前问题的范围内。
内容的提问来源于stack exchange,提问作者dmn
相关产品推荐
相关产品推荐

