微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ios – MKMapView中心不正确

我有一个应用程序,我正在创建一个视图层次结构,我有一个mapview和一个tableview. mapview位于tableview下,当表垂直偏移为负时,它在顶部可见.
视图的结构是这样的:

黄色是地图的地方,顶部的绿色是导航栏,底部的绿色是桌面视图.

滚动表格视图时,地图应显示地图可见部分中心的用户位置.

我遇到的问题是,当我应用视差时,地图中心不是我正在设置的位置.
这是我用来隔离问题的示例项目的屏幕截图.中心坐标是白金汉宫.

橙色方块是一个调试视图,位于mapView的中心(中心坐标应该是).我确信视差效果是正确的.

我的视图层次结构关于示例项目中mapView的结构如下图所示.视图的位置反映了上面的截图.

以下代码用于设置mapContainerView的frame.origin.y值.我正在使用mapContainerView来避免触摸mapView的帧来执行视差效果. mapView是mapContainerView的子视图(在开始时我在mapView上使用了一个翻译但是我改变了代码以试图找出这个问题的原因)

self.mapViewContainer.frame = CGRectMake(0,self.currentY,CGRectGetWidth(self.view.frame),CGRectGetHeight(self.view.frame));

if (!CGRectEqualToRect(self.mapViewContainer.bounds,self.mapView.bounds)) {
    self.mapView.bounds = CGRectMake(0,CGRectGetWidth(self.mapViewContainer.bounds),CGRectGetHeight(self.mapViewContainer.bounds));

    self.mapView.center = CGPointMake(CGRectGetMidX(self.mapViewContainer.bounds),CGRectGetMidY(self.mapViewContainer.bounds));
}

self.squareView.bounds = CGRectMake(0,22.0f,22.0f);
self.squareView.center = CGPointMake(CGRectGetMidX(self.mapViewContainer.bounds),CGRectGetMidY(self.mapViewContainer.bounds));

我的猜测是状态栏正在对mapView做些什么.如果您查看模拟器截图,您可以注意到中心坐标是如何精确定位在从状态栏到mapView底部的垂直空间的中心.

如果我在viewDidLoad中设置坐标的中心,则在创建地图后(当它的帧是CGRectZero时),地图的中心正确地位于地图的中心.

如果我稍后更改它(例如使用计时器,为了模拟位置更新,设置与viewDidLoad中设置的相同的地图区域),地图视图决定更改中心,如上所示.

我找不到任何方法来禁用或更改此行为.我在这里做错了吗?我正在努力解决方法,但我很想知道是否有人知道我在这里缺少什么.

这是我创建的示例项目的代码,用于在隔离场景中重现问题. https://gist.github.com/lucabartoletti/a5f103cb74a3edb178d6

我有一些限制.

>地图必须足够大才能覆盖窗框
>状态栏必须可见

解决方法

试试这个:
_mapView.delegate = self;

func mapView(mapView: MKMapView!,didUpdateUserLocation 
        userLocation: MKUserLocation!) {
    mapView.centerCoordinate = userLocation.location.coordinate
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐