你如何着色/定制UIImagePickerController的导航栏?

时间:2014-11-27 06:18:47

标签: swift uiimagepickercontroller

为UIImagePickerController的导航栏着色的正确方法是什么?
我只是试图看到背景颜色,但我得到一个褪色的颜色,如下图所示;好像有些观点阻碍了它。

let picker = UIImagePickerController()
picker.sourceType = type
picker.mediaTypes = [kUTTypeImage]
picker.delegate = self
picker.navigationBar.backgroundColor = UIColor.redColor()

enter image description here

它似乎有一些视图模糊了redColor():

(lldb) po picker.navigationBar.subviews
2 values
 {
  [0] = 0x00007fe7bb52a890
  [1] = 0x00007fe7bb52b670
}

为导航栏创建纯色的正确方法是什么?

8 个答案:

答案 0 :(得分:52)

针对Swift 4.2进行了更新

为了完整起见,我将添加全彩色自定义设置:

let imagePicker = UIImagePickerController()
imagePicker.navigationBar.isTranslucent = false
imagePicker.navigationBar.barTintColor = .blue // Background color
imagePicker.navigationBar.tintColor = .white // Cancel button ~ any UITabBarButton items
imagePicker.navigationBar.titleTextAttributes = [
        NSAttributedString.Key.foregroundColor: UIColor.white
] // Title color

导致:

enter image description here

答案 1 :(得分:20)

尝试:

picker.navigationBar.translucent = false
picker.navigationBar.barTintColor = .redColor()

而不是

picker.navigationBar.backgroundColor = UIColor.redColor()

如果您想要半透明效果,请将translucent = true保留为默认值。

答案 2 :(得分:9)

这是Objective-C中正确的解决方案代码。可能有用。

imagePickerController.navigationBar.translucent = NO;
imagePickerController.navigationBar.barTintColor = [UIColor colorWithRed:0.147 green:0.413 blue:0.737 alpha:1];
imagePickerController.navigationBar.tintColor = [UIColor whiteColor];
imagePickerController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor]};

答案 3 :(得分:8)

Swift = IOS 8 || 9

只需使用此方法

func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) 
{
     imagePicker.navigationBar.tintColor = .whiteColor()
     imagePicker.navigationBar.titleTextAttributes = [
     NSForegroundColorAttributeName : UIColor.whiteColor()
     ]

}

答案 4 :(得分:2)

对于Swift,IOS 8-10 正如rintaro所说,我认为这里的主要问题是改变选择器navigationBar的默认半透明属性:

picker.navigationBar.translucent = false

如果您在应用中的某个位置设置此选项,则会导致导航栏使用UINavigationBar外观。

如果您需要其他颜色,可以使用
picker.navigationBar.barTintColor = UIColor.someColor

答案 5 :(得分:2)

Swift 5 / IOS 13

我找到了此解决方案:

let barApperance = UINavigationBar.appearance()
barApperance.tintColor = .systemBlue

只需将其放在创建UIImagePickerController()的位置

答案 6 :(得分:0)

  

UIImagePickerControllerUINavigationController。有可能   样式与UINavigationController样式相同。

答案 7 :(得分:0)

[[UINavigationBar appearance] setTintColor:[UIColor blueColor]];
[[UINavigationBar appearance] setTitleTextAttributes:
    [NSDictionary dictionaryWithObjectsAndKeys:
     [UIColor whiteColor], nil]];

这在 iOS 14 上对我有用。其他都不起作用。