带导航栏的MKMapView内容插图

时间:2014-08-25 21:12:57

标签: ios objective-c mkmapview mapkit

我遇到一个奇怪的问题,MKMapView放在带导航栏的视图中。给定UIScrollView处于相同的情况,其宽度,高度和中心被约束到它的超级视图(视图控制器的view对象),如果控制器的automaticallyAdjustsScrollViewInsets属性设置为{{{}},则将调整插入。 1}},而不是设置为YES。那很棒。我无法在任何地方找到此文档,但地图视图似乎也做同样的事情,但是无法禁用它。设置NO无效。

简而言之(ish):

在下图中,无论导航栏如何,小后方都在视图中居中。地图视图也被限制为视图的大小(它延伸到导航栏后面)。地图视图的位置设置为当前位置(也用蓝色圆圈表示),所以我希望它们匹配,但它们会偏离状态和导航栏的组合高度的一半。

是否有针对此行为的解释,以及如何让它按预期工作?

Screenshot of MKMapView acting a fool

这很奇怪,因为MKMapView不是UIScrollView的子类,但在这种情况下它的行为类似于一个。这并非完全不合理,但我希望自动调整插图在地图视图和滚动视图上一致地工作。

解决方法

像这样糟糕的事情会“解决问题”:

automaticallyAdjustsScrollViewInsets

也可以调整底部插图,或者在顶部添加负插图使得事物排成一行,但如果地图视图的这种行为发生变化,或者如果视图控制器没有导航栏,则会中断,或者如果有一阵微风。它也削弱了我将正确的坐标拉回地图视图的信心。

2 个答案:

答案 0 :(得分:6)

MKMapView确实位于导航栏下方,但会自动使用住房视图控制器topLayoutGuide从其下方移动注释和指南针视图等。

您应该确保自己的观点在自动布局代码中考虑到这一点。

答案 1 :(得分:-1)

如果你看一下这个,你可以看到mapview很可能不会像你想象的那样坐在导航栏下面。它位于导航栏底部和超视图底部之间。

另一方面,默认情况下导航栏是半透明的,所以如果mapview真的位于导航栏下,你可以看到它,假设你没有禁用默认的导航栏行为。

enter image description here