我试图在项目中为不同的UIViewController设置不同的UINavigationBar颜色。现在我尝试在每个UIViewController类的ViewdidAppear方法中跟随代码并且它仍然不工作导航栏的颜色没有改变。
UIImage *navBackgroundImage = [UIImage imageNamed:@"redbar.png"];
[[UINavigationBar appearance] setBackgroundImage:navBackgroundImage forBarMetrics:UIBarMetricsDefault];
请帮帮我
答案 0 :(得分:11)
尝试
[[UINavigationBar appearance] setBarTintColor: [UIColor redColor]];
或者,在iOS 6上,
[[UINavigationBar appearance] setTintColor:[UIColor redColor]];
如果你有一个导航控制器作为rootViewController,请使用:
UINavigationController* nc = (UINavigationController*)[[[UIApplication sharedApplication] delegate] window].rootViewController;
然后设置颜色:
[nc.navigationBar setBarTintColor:[UIColor redColor]];
如果你想改变每个viewcontroller中的颜色,只需将代码放在每个viewWillAppear
方法中
如果您不想覆盖每个viewcontroller中的viewWillAppear
,可以为项目创建一个超级视图控制器。但如果为时已晚,您还可以创建自定义UINavigationController
并简单地覆盖推送/弹出方法,如:
-(void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{
[super pushViewController:viewController animated:animated];
[self.navigationBar setBarTintColor:[UIColor redColor]];
}
对四种方法执行此操作:
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;
- (UIViewController *)popViewControllerAnimated:(BOOL)animated;
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;
或至少对您使用的方法。
然后在viewControllers中覆盖需要另一个条形颜色的viewWillAppear
。
答案 1 :(得分:3)
您似乎想要在 storyboard 中设置颜色,而不是在代码中设置颜色。
然后,打开属性检查,
尝试不同的条形色调或更改其背面图像将有效。
答案 2 :(得分:3)
夫特:
全局:
self.navigationController?.navigationBar.tintColor = UIColor.RGB(197, 104, 66)
对于每个UIViewController:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.navigationBar.barTintColor = UIColor.RGB(197, 104, 66)
}
答案 3 :(得分:1)
当你在viewWillAppear
上设置颜色时,大多数解决方案会在改变背景颜色时给你一个闪烁效果。
没有闪烁效果的解决方案是在viewDidLoad
中为每个视图控制器设置导航栏颜色,然后在导航前更改背景颜色,如下所示。
override func viewDidLoad() {
super.viewDidLoad()
self.showGrayNavigationBar()
}
然后找到上一个视图控制器并在viewAppears之前设置背景颜色:
override func willMove(toParentViewController parent: UIViewController?) {
let count = self.navigationController?.viewControllers.count
let vc = self.navigationController?.viewControllers[count! - 2]
if vc is ServicesViewController{
vc!.showGrayNavigationBar()
}else if vc is ServiceDetailsViewController{
vc!.showBlueNavigationBar()
}
}
答案 4 :(得分:0)
使用UINavigationController作为根视图,您必须在ViewWillAppear方法上使用以下方法:
[self.navigationController.navigationBar setBarTintColor:[UIColor redColor]];
它会更改您当前的UIViewController
导航栏颜色:)
答案 5 :(得分:0)
在预览控制器中实现,使导航栏颜色清晰:
-(void)viewdidload{
[self.navigationController.navigationBar setBackgroundImage:[XXXImage imageWithColor:[UIColor clearColor]] forBarMetrics:UIBarMetricsDefault];
...
}
在导航栏的同一框架中设置自定义视图。
答案 6 :(得分:0)
Swift 2.2
func navigationCtrl(){
self.navigationController?.navigationBar.barTintColor = UIColor.redColor()
self.navigationItem.leftBarButtonItem = UIBarButtonItem(image: UIImage(named: "close_icon"), style: .Done, target: self ,action: #selector(UIViewController.dismissAction(_:)) )
self.navigationItem.leftBarButtonItem?.tintColor = UIColor.whiteColor()
self.navigationController?.navigationBar.titleTextAttributes = [ NSFontAttributeName: UIFont.IRANSansWeb(UIFont.IRANSansWebType.Medium, size: 20) , NSForegroundColorAttributeName : UIColor.whiteColor()]
}