ナビゲーション コントローラーとタブ バー コントローラーを備えた ViewController があります。この ViewController には、スクロール ビューとマップ ビューの表示を切り替える 2 つのボタンがあります。主なことは、これらの 2 つのボタンが、向きやたまたま表示されているビューに関係なく、常に同じ場所に表示されるようにすることです。
私が抱えている問題は、MapView のサイズが適切に調整されないことです。self.view.bounds からフレームを指定すると、ナビゲーションバー/タブバーの下に移動します-基本的に画面全体を占有します。これにより、トグル ボタンの位置がずれます。
ScrollView も (背景色と半透明のナビゲーション バーを使用して) 同じことを行うことに気付きましたが、サブ ビューの配置は表示領域内 (ナビゲーション バーとタブ バーの間) にとどまります。そのため、トグル ボタンを追加すると、正しい場所に表示されます。
トグル ボタンを押すと、ボタンの親ビューを現在表示されているビュー (ScrollView または MapView) に再割り当てするだけです。これは常にスクロール ビューで機能しますが、位置が原因で、MapView が表示されたときにナビゲーション バーの下に移動してしまいます。
MapView のフレームを手動で作成しようとしましたが、奇妙な結果が得られます。私はこれをフレームに使用します:
CGRect mapFrame = CGRectMake(
0,
(self.navigationController.navigationBar.frame.size.height + [UIApplication sharedApplication].statusBarFrame.size.height),
self.view.frame.size.width,
(
self.view.frame.size.height
- (self.navigationController.navigationBar.frame.size.height + [UIApplication sharedApplication].statusBarFrame.size.height + self.tabBarController.tabBar.frame.size.height)
)
);
次に、自動サイズ変更マスクを設定します
[self.mapView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin];
しかし、これで、横向きモードでView Controllerに入ると、MapViewが画面から外れます。縦向きモードに入ってから横向きに回転すると、上部の余白がオフになりますが、約 10 ポイントなので、ナビゲーション バーの下に少し移動します (タブ バーとマップ ビューの下部の間に目に見える余白があります)。
ScrollView のように、MapView サブビューを可視領域内にのみ表示するにはどうすればよいですか? ナビゲーションバー・タブバーの下に地図自体が入ってしまってもさほど気にならない