我通过调用:在我的应用程序中设置了一个全局tintColor:
UIView.appearance().tintColor = myColor但是,同样的颜色适用于UIImagePickerController,并且只有一些UI元素被着色:例如,sun图标有一个自定义tintColor,而焦点帧有默认的tintColor。
如何不将全局外观配置应用到UIImagePickerController

我提议的解决方案没有完全解决这个问题,因为inputAccessoryView仍然有自己的tintColor:
window?.tintColor = myColor更新:
我在启动时配置了应用程序范围的tintcolor:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
configureWindowAndInitialViewController()
UIView.appearance().tintColor = .cyan // Setting a global tintColor
return true
}然后,我展示了一个UIImagePickerController
func presentPhotoPicker(sourceType: UIImagePickerController.SourceType) {
if let mediaTypes = UIImagePickerController.availableMediaTypes(for: sourceType)?
.filter({$0 == kUTTypeImage as String}),
!mediaTypes.isEmpty {
let picker = UIImagePickerController()
picker.delegate = self
picker.mediaTypes = mediaTypes
picker.sourceType = sourceType
picker.allowsEditing = true
controller?.present(picker, animated: true, completion: nil)
}
}输入附件视图:
要添加一个输入附件视图,首先应该创建一个textField。然后,只需将工具栏附加到Textfield即可。
let spacer = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: sefl.view, action: #selector(UIView.endEditing))
items.append(contentsOf: [spacer, doneButton])
toolbar.setItems(items, animated: false)
textField.inputAccessoryView = toolbar

发布于 2018-06-20 13:51:38
更改window?.tintColor后,inputAccessoryView.tintColor不会更改,因为inputAccessoryView不是当前窗口的子视图(它们没有相同的视图层次结构),因此window.tintColor不会影响inputAccessoryView。
为了解决问题,我建议每次出现新的NotificationCenter时都使用window.tintColor来观察和更改UIWindow。您可以将代码放入AppDelegate中
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
NotificationCenter.default.addObserver(self, selector: #selector(self.windowDidBecomeVisible), name: .UIWindowDidBecomeVisible, object: nil)
return true
}
@objc func windowDidBecomeVisible(notification: NSNotification) {
// Each time an `UIWindow` becomes visible, change its |tintColor|
let visibleWindow = notification.object as! UIWindow
visibleWindow.tintColor = .red
}如果只想为tintColor更改UIImagePickerController,则需要更改显示在UIImagePickerController上的每个视图的tintColor。
tintColor。
扩展UIView { func changeTintColor(颜色: UIColor) -> ->{->{ view.tintColor =->view.changeTintColor(颜色:颜色);}UINavigationControllerDelegate获取显示在UIImagePickerView上的UIViewController。更改此控制器内视图的tintColor
func navigationController(_ navigationController: UINavigationController,willShow viewController: UIViewController,动画: Bool) {viewController.view.changeTintColor(颜色:.red) }UIImagePickerController的delegate设为self。发布于 2018-06-13 11:41:52
通过在窗口上设置全局tintColor而不是UIAppearance代理来修正:
window?.tintColor = myColor发布于 2018-06-24 12:32:39
我相信这就是你想要的,试着改变一下你的喜好:
let myImagePicker = UIImagePickerController()
myImagePicker.navigationBar.translucent = false
myImagePicker.navigationBar.barTintColor = .blueColor() // Background color
myImagePicker.navigationBar.tintColor = .whiteColor() // Cancel button ~ any UITabBarButton items
myImagePicker.navigationBar.titleTextAttributes = [
NSForegroundColorAttributeName : UIColor.whiteColor()
] // Title color我只找到了这些:
自定义相机控件
var showsCameraControls: Bool指示图像选择器是否显示默认照相机控件。
var cameraOverlayView: UIView?在默认图像选择器接口顶部显示的视图。
var cameraViewTransform: CGAffineTransform应用于摄像机预览图像的转换。捕捉静止图像或电影
func takePicture()使用相机捕捉静止图像。
func startVideoCapture()使用UIImagePickerControllerCameraDevice属性指定的摄像机启动视频捕获。
func stopVideoCapture()停止视频捕捉。
将相机配置为使用
class func isCameraDeviceAvailable(UIImagePickerControllerCameraDevice)返回一个布尔值,该值指示给定摄像机是否可用。
var cameraDevice: UIImagePickerControllerCameraDevice图像选择器控制器使用的照相机。
enum UIImagePickerControllerCameraDevice用于拍摄图像或电影的照相机。配置相机捕获模式
class func availableCaptureModes(for: UIImagePickerControllerCameraDevice)返回一个NSNumber对象数组,该数组指示给定相机设备支持的捕获模式。
var cameraCaptureMode: UIImagePickerControllerCameraCaptureMode摄像机使用的捕捉模式。
enum UIImagePickerControllerCameraCaptureMode相机要捕捉的媒体类别。
配置闪存行为
class func isFlashAvailable(for: UIImagePickerControllerCameraDevice)指示给定的摄像机是否具有闪光灯照明能力。
var cameraFlashMode: UIImagePickerControllerCameraFlashMode活动相机使用的闪光灯模式。
enum UIImagePickerControllerCameraFlashMode与活动相机一起使用的闪光灯模式。
配置导出预置
var imageExportPreset: UIImagePickerControllerImageURLExportPreset预置用于准备图像输出到您的应用程序。
enum UIImagePickerControllerImageURLExportPreset指示如何将图像导出到客户端应用程序的常量。
var videoExportPreset: String预设使用时,准备视频出口到您的应用程序。
我已经在文档中进行了挖掘,并没有找到一种改变焦点视图的方法。也许苹果不让你这么做。也许cocoapods上有一个自定义的PickerView框架,或者有一个定制的相机框架。
https://stackoverflow.com/questions/50835655
复制相似问题