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

IAM пытается установить другой цвет 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)
}

похоже, что вы хотите установить цвет в раскадровка, не код.

enter image description here

и затем откройте атрибут inspect,

enter image description here

попробуйте разные бар подкраска или изменить его изображение будет работать.


большинство решений даст вам эффект мигания при изменении цвета фона, как вы устанавливаете цвета на 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 цвета виджет navigationbar :)