1

これは私のmapViewのコードです:

self.mapView = [[MKMapView alloc] init];
self.mapView.frame = CGRectMake(0, 70 , self.view.bounds.size.width,
self.view.bounds.size.height);

1 つのビュー コントローラーからこのビュー コントローラーにプッシュすると、問題なく表示されます。ナビゲーション バーとマップ ビューはすべて正しい位置にあります。ただし、別のviewControllerからマップViewcontrollerに直接移動するボタンを作成しようとすると、すべてが変更されました。

マップ ビューが縮小され、ナビゲーション バーが表示されなくなりました..? 他の ViewController からの新しいボタンは次のとおりです。

UIImage* image4 = [UIImage imageNamed:@"Near_me_carousel.png"];
    _mapButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 18, 26, 26)];
    [_mapButton setBackgroundImage:image4 forState:UIControlStateNormal];
    [_mapButton addTarget:self action:@selector(MapButton)
        forControlEvents:UIControlEventTouchUpInside];
    [_mapButton setShowsTouchWhenHighlighted:YES];
    [self.view addSubview:_mapButton];

メソッドは次のとおりです。

-(void) MapButton {

    MapViewController *mapView = [[MapViewController alloc] init];

    [self.navigationController presentViewController:mapView animated:YES completion:NULL];
}

どうしてこうなったのか、とても不思議です!何か案は?

4

1 に答える 1

1

これが本当にあなたの問題かどうかはわかりませんが、ここにショットがあります:

ボタンメソッド内で、MapViewControllerモーダルを呼び出しています。viewController自体に がなければUINavigationBarもちろん表示されません。

を介してプッシュ トランジションがある場合UINavigationController、navigationBar がビューの上に自動的に追加されます。

ここで注意が必要な点があります。プッシュ トランジションとして表示される場合0、ビューのフレームの y 値は、navigationBar のすぐ下のポイントになります。つまり、navigationBar はビューに属していません。

また、モーダル トランジション (presentViewController:) を通じて表示される場合、0y の値は、NavigationBar を自分で追加した場合でも、ウィンドウの左上のポイントになります。

説明:

モーダルとして提示された場合、その起源はここになります: ここに画像の説明を入力

ナビゲーション スタックでのプッシュの場合は、次のように表示されます。 ここに画像の説明を入力

結論:

したがって、あなたの場合、70このコードの y 値

self.mapView.frame = CGRectMake(0, 70 , self.view.bounds.size.width,
self.view.bounds.size.height);

トランジションスタイルによって異なります。モーダルでは、ポイントが上に移動したように見えます44(ナビゲーションバーのサイズ)

于 2013-09-14T01:16:17.140 に答える