Как установить другой цвет панели навигации для разных UIViewcontroller в xib?
Я пытаюсь установить другой цвет UINavigationBar для разных UIViewController в проекте.До сих пор я пробовал следующий код в ViewdidAppear methode каждого класса UIViewController и его не работает до сих пор цвет navigationbar не меняется.
UIImage *navBackgroundImage = [UIImage imageNamed:@"redbar.png"];
[[UINavigationBar appearance] setBackgroundImage:navBackgroundImage forBarMetrics:UIBarMetricsDefault];
Пожалуйста, помогите мне
7 ответов:
Попробуйте
[[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
методЕсли вы не хотите переопределять
viewWillAppear
в каждом viewcontroller, вы можете создать супер viewcontroller для вашего проекта. Но если уже слишком поздно, вы можете также создать пользовательскийUINavigationController
и просто переопределите push / pop методы, такие как:-(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;
viewWillAppear
в ваших viewControllers, которым нужен другой цвет панели.
Свифт:
Глобальный:
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) }
Похоже, что вы хотите задать цвет в раскадровке, а не в коде.
И затем откройте атрибут inspect,
Попробуйте другой оттенок бара или измените его задний образ будет работать.
Большинство решений даст вам эффект мигания при изменении цвета фона, когда вы устанавливаете цвета на
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() } }
Реализовать в контроллере предварительного просмотра, чтобы сделать панель навигации четким цветом:
-(void)viewdidload{ [self.navigationController.navigationBar setBackgroundImage:[XXXImage imageWithColor:[UIColor clearColor]] forBarMetrics:UIBarMetricsDefault]; ... }
Установите пользовательский вид в той же рамке панели навигации.
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()] }