Как установить другой цвет навигационной панели для разных 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)
}
похоже, что вы хотите установить цвет в раскадровка, не код.
и затем откройте атрибут 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()]
}
используя UINavigationController в качестве корневого представления, вы должны использовать следующий метод для метода ViewWillAppear:
[self.navigationController.navigationBar setBarTintColor:[UIColor redColor]];
это изменит ваш текущий UIViewController
цвета виджет navigationbar :)