gpt4 book ai didi

ios - 解决 viewController 尺寸之谜!为什么元素(UIImageView 和导航栏)在切换 viewController 时会改变大小?

转载 作者:行者123 更新时间:2023-11-29 13:05:17 30 4
gpt4 key购买 nike

所以这是我的 mapView 的代码:

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

当我从一个 View Controller 推送到这个 View Controller 时,它看起来很好。导航栏和 map View 都在正确的位置;然而,当我尝试创建一个从另一个 viewController 直接转到 map Viewcontroller 的按钮时,一切都改变了。

map View 缩小了,现在导航栏不见了..?这是来自另一个 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];
}

我很困惑为什么会这样!有什么想法吗?

最佳答案

我不知道这是否真的是你的问题,但这是一个镜头:

在您的按钮方法中,您正在模态调用您的 MapViewController。如果viewController本身没有UINavigationBar,当然不会显示。

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

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

当通过模态转换 (presentViewController:) 呈现时,0 y 值是窗口的顶部/左侧点,即使您自己添加 NavigationBar。

说明:

如果以模态形式呈现,它的起源将在这里: enter image description here

如果在导航堆栈中推送,则显示在此处: enter image description here

结论:

因此,在您的情况下,此代码中的 y 值 70

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

会根据过渡样式不同。在模态中,它看起来像是将 44 指向顶部(导航栏的大小)

关于ios - 解决 viewController 尺寸之谜!为什么元素(UIImageView 和导航栏)在切换 viewController 时会改变大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18793400/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com