5

ナビゲーション コントローラーとタブ バー コントローラーを備えた 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 サブビューを可視領域内にのみ表示するにはどうすればよいですか? ナビゲーションバー・タブバーの下に地図自体が入ってしまってもさほど気にならない

4

1 に答える 1

13

うーん、ほんの数分前に答えを見つけました。これが iOS 7 のデフォルトの動作である理由はわかりませんが、悲しいことに、そうです。

解決策は、これをViewControllerのviewDidLoadに追加することです

[self setEdgesForExtendedLayout:UIRectEdgeNone];
[self setAutomaticallyAdjustsScrollViewInsets:NO];

ここの投稿に感謝します

于 2013-10-03T13:48:43.110 に答える