web-dev-qa-db-ja.com

[UIImage new]に設定した後、navigationBarの背景画像を復元します

MapViewには完全に透明なナビゲーションバーが必要だったので、次のようにしました。

[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setShadowImage:[UIImage new]];

ここに見られるように、それは望ましい効果を返します:

enter image description here

ナビゲーションバーが透明なままなので、他の場所に移動すると問題が発生します。

enter image description here

ナビゲーションバーのbackgroundImageとshadowImageのデフォルト設定を復元するにはどうすればよいですか?

22
budidino

マップビューのviewWillDisappearにあるナビゲーションコントローラーの画像にnilを設定します

マップビューでこの2つの方法を設定します

MapView。m

-(void)viewWillAppear:(BOOL)animated{
    [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
    [self.navigationController.navigationBar setShadowImage:[UIImage new]];
}

-(void)viewWillDisappear:(BOOL)animated{
    [self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
    [self.navigationController.navigationBar setShadowImage:nil];
}
54
Toseef Khilji

For Swift

override func viewWillAppear(_ animated: Bool) {
  super.viewWillAppear(animated)

  self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
  self.navigationController?.navigationBar.shadowImage = UIImage()
}

override func viewWillDisappear(_ animated: Bool) {
  super.viewWillDisappear(animated)

  self.navigationController?.navigationBar.setBackgroundImage(nil, for: UIBarMetrics.default)
  self.navigationController?.navigationBar.shadowImage = nil
}
7
Hapeki

ちなみに、関数を使って元の背景画像を取得します

UIImageView *imageView = [self.navigationController.navigationBar
backgroundImageForBarMetrics:UIBarMetricsDefault];

画像をどこかに保存してから、

[self.navigationController.navigationBar setBackgroundImage:imageView 
forBarMetrics:UIBarMetricsDefault];

それを元に戻すには、ほとんどの場合、nilに設定すると問題が解決します。

0
godmanzheng