1

所以这是我的 mapView 的代码:

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

当我从一个视图控制器推送到这个视图控制器时,它看起来很好。导航栏和地图视图都在正确的位置;但是,当我尝试创建一个从另一个视图控制器直接转到地图视图控制器的按钮时,一切都发生了变化。

地图视图缩小了,现在导航栏不见了..?这是来自另一个 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,当然不会显示。

当您通过 a 进行推送转换时,UINavigationController导航栏会自动添加到您的视图上方。

这是棘手的部分:当呈现为推送转换时,0视图框架的 y 值是导航栏正下方的点。即,导航栏不属于您的视图。

并且当通过模态转换(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 回答