プロジェクト内のUIViewControllerごとに異なるUINavigationBarの色を設定しようとしています。これまで、各UIViewControllerクラスのViewdidAppearメソッドで次のコードを試しましたが、機能しませんが、ナビゲーションバーの色は変わりません。
UIImage *navBackgroundImage = [UIImage imageNamed:@"redbar.png"];
[[UINavigationBar appearance] setBackgroundImage:navBackgroundImage forBarMetrics:UIBarMetricsDefault];
私を助けてください
試してみてください
[[UINavigationBar appearance] setBarTintColor: [UIColor redColor]];
または、iOS6では
[[UINavigationBar appearance] setTintColor:[UIColor redColor]];
RootViewControllerとしてナビゲーションコントローラーがある場合は、次の方法で入手してください。
UINavigationController* nc = (UINavigationController*)[[[UIApplication sharedApplication] delegate] window].rootViewController;
そして、色を設定します。
[nc.navigationBar setBarTintColor:[UIColor redColor]];
また、各ビューコントローラの色を変更する場合は、各viewWillAppear
メソッドにコードを配置するだけです。
すべてのビューコントローラーでviewWillAppear
をオーバーライドしたくない場合は、プロジェクトのスーパービューコントローラーを作成できます。ただし、手遅れの場合は、カスタムUINavigationController
を作成して、次のようなプッシュ/ポップメソッドをオーバーライドすることもできます。
-(void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{
[super pushViewController:viewController animated:animated];
[self.navigationBar setBarTintColor:[UIColor redColor]];
}
4つの方法でこれを行います。
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;
- (UIViewController *)popViewControllerAnimated:(BOOL)animated;
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;
または、少なくとも使用する方法については。次に、別のバーの色が必要なviewControllersのviewWillAppear
をオーバーライドします。
迅速:
グローバル:
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)
}
コードではなく、ストーリーボードで色を設定したいようです。
次に、属性検査を開きます。
別のバーの色合いを試すか、その背面画像を変更してください。
ほとんどのソリューションでは、viewWillAppear
で色を設定しているときに、背景色を変更しながらまばたき効果が得られます。
まばたき効果のない解決策は、各ビューコントローラーのナビゲーションバーの色をviewDidLoad
に設定し、ナビゲーション前に背景色を次のように変更することです。
override func viewDidLoad() {
super.viewDidLoad()
self.showGrayNavigationBar()
}
次に、前のView Controllerを見つけて、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()
}
}
スイフト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
ナビゲーションバーの色が変更されます:)
プレビューコントローラーに実装して、ナビゲーションバーの色を明確にします。
-(void)viewdidload{
[self.navigationController.navigationBar setBackgroundImage:[XXXImage imageWithColor:[UIColor clearColor]] forBarMetrics:UIBarMetricsDefault];
...
}
ナビゲーションバーの同じフレームにカスタムビューを設定します。