web-dev-qa-db-ja.com

xibの異なるUIViewcontrollerに異なるナビゲーションバーの色を設定するにはどうすればよいですか?

プロジェクト内のUIViewControllerごとに異なるUINavigationBarの色を設定しようとしています。これまで、各UIViewControllerクラスのViewdidAppearメソッドで次のコードを試しましたが、機能しませんが、ナビゲーションバーの色は変わりません。

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

私を助けてください

10
Naveen Kumar

試してみてください

[[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をオーバーライドします。

12
Y.Bonafons

迅速:

グローバル:

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)
}
3
William Hu

コードではなく、ストーリーボードで色を設定したいようです。

enter image description here

次に、属性検査を開きます。

enter image description here

別のバーの色合いを試すか、その背面画像を変更してください。

3
chenzhongpu

ほとんどのソリューションでは、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()
    }
}
1
LC 웃

スイフト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()]
        }
0

ルートビューとしてUINavigationControllerを使用するには、ViewWillAppearメソッドで次のメソッドを使用する必要があります。

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

現在のUIViewControllerナビゲーションバーの色が変更されます:)

0
tryp
  1. プレビューコントローラーに実装して、ナビゲーションバーの色を明確にします。

    -(void)viewdidload{
        [self.navigationController.navigationBar setBackgroundImage:[XXXImage imageWithColor:[UIColor clearColor]] forBarMetrics:UIBarMetricsDefault];
        ...
    }
    
  2. ナビゲーションバーの同じフレームにカスタムビューを設定します。

0
jiangjiefs