MapViewには完全に透明なナビゲーションバーが必要だったので、次のようにしました。
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setShadowImage:[UIImage new]];
ここに見られるように、それは望ましい効果を返します:
ナビゲーションバーが透明なままなので、他の場所に移動すると問題が発生します。
ナビゲーションバーのbackgroundImageとshadowImageのデフォルト設定を復元するにはどうすればよいですか?
マップビューの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];
}
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
}
ちなみに、関数を使って元の背景画像を取得します
UIImageView *imageView = [self.navigationController.navigationBar
backgroundImageForBarMetrics:UIBarMetricsDefault];
画像をどこかに保存してから、
[self.navigationController.navigationBar setBackgroundImage:imageView
forBarMetrics:UIBarMetricsDefault];
それを元に戻すには、ほとんどの場合、nilに設定すると問題が解決します。