带导航栏的MKMapView内容插图

Ant*_*tox 13 objective-c mapkit mkmapview ios

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

简而言之(ish):

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

是否有对此行为的解释,以及使其按预期工作的方法?

MKMapView扮演傻瓜的屏幕截图

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

解决方法

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

MKCoordinateRegion region = MKCoordinateRegionMake(self.coordinate, MKCoordinateSpanMake(0.008, 0.008));
MKMapRect mapRect = MKMapRectForCoordinateRegion(region);
[self.mapView setVisibleMapRect:mapRect edgePadding:UIEdgeInsetsMake(0, 0, 64, 0) animated:YES];
Run Code Online (Sandbox Code Playgroud)

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

inc*_*nus 6

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

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

  • 这听起来与我的经历一致.这种行为记录在哪里吗?你知道是否有办法改变这种行为而忽视了`topLayoutGuide`? (4认同)

Mik*_*ike -1

如果你看一下这个,你会发现地图视图很可能不像你想象的那样位于导航栏下方。它位于导航栏底部和超级视图底部之间。

另一方面,导航栏默认是半透明的,因此如果地图视图确实位于导航栏下方,假设您没有禁用默认导航栏行为,您将能够看到它。

在此输入图像描述