2013-10-03 80 views
5

我有一个带有导航控制器和标签栏控制器的ViewController。这个ViewController有2个按钮可以切换滚动视图和地图视图的可见性。最主要的是让这两个按钮始终显示在同一个地方,而不管方向或视图是否可见。iOS MapView进入导航栏,状态栏和标签栏控制器

我遇到的问题是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]; 

但有了这个,如果我在横向模式下进入视图控制器 - 的MapView是关闭屏幕。如果我以纵向模式进入,然后旋转到横向,则顶部边距会关闭,但大约有10个点,因此它仍然位于导航栏的下方(并且在标签栏和地图视图的底部之间有可见边距)。

如何让MapView子视图只显示在可见区域内,就像ScrollView一样?如果地图本身位于导航栏/标签栏

回答

13

我不介意这么多呃,几分钟前我找到了答案。我不知道为什么这是iOS 7的默认行为,但唉,它是。

解决的办法是把它添加到viewDidLoad中的视图控制器

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

由于大部分to the post here

+0

你应该纪念这个作为回答了。 :) 谢谢您的帮助。 – James

+0

谢谢你的解决方案。 – jhondge

相关问题