Как установить другой цвет панели навигации для разных UIViewcontroller в xib?


Я пытаюсь установить другой цвет UINavigationBar для разных UIViewController в проекте.До сих пор я пробовал следующий код в ViewdidAppear methode каждого класса UIViewController и его не работает до сих пор цвет navigationbar не меняется.

UIImage *navBackgroundImage = [UIImage imageNamed:@"redbar.png"];
    [[UINavigationBar appearance] setBackgroundImage:navBackgroundImage forBarMetrics:UIBarMetricsDefault];

Пожалуйста, помогите мне

7 9

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()
    }
}
  1. Реализовать в контроллере предварительного просмотра, чтобы сделать панель навигации четким цветом:

    -(void)viewdidload{
        [self.navigationController.navigationBar setBackgroundImage:[XXXImage imageWithColor:[UIColor clearColor]] forBarMetrics:UIBarMetricsDefault];
        ...
    }
    
  2. Установите пользовательский вид в той же рамке панели навигации.

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()]
        }

Используя UINavigationController в качестве корневого представления, вы должны использовать следующий метод в методе ViewWillAppear:

[self.navigationController.navigationBar setBarTintColor:[UIColor redColor]];

Это изменит ваш текущий UIViewController цвет панели навигации:)