如果在横向模式下初始化,iOS MKMapView会显示空白地图,而主页按钮位于右侧

时间:2016-01-26 14:00:59

标签: ios mkmapview landscape

我试图在基于Cordova的应用程序中使用MKMapView,一切似乎工作正常,除非我在设备处于横向模式时使用代码对其进行初始化,而主页按钮位于右侧:

MKMapView* mapView = [[MKMapView alloc]initWithFrame:CGRectMake(200, 62, 824, 708)];

地图显示空白,只有'法律'地图一角可见的措辞。 blank map

奇怪的是,当主页按钮位于左侧且仍然处于横向模式时,调用上面相同的代码没有显示地图的问题。

在纵向模式下,每次都能正常工作...... working map

另一件需要注意的事情是,在纵向模式下正确初始化后,将设备再次旋转到横向,它将起作用。此外,它只发生在iPad 4,iPad mini和iPhone 5(公司设备,而不是我的),而iPhone 6 Plus没有这个问题。然而,在iPhone 6 Plus上,地图的坐标在横向模式下也是不对的,这意味着如果我给它一个坐标来居中地图,它会在错误的位置居中,但是当处于纵向模式或主页按钮打开时左边它正确居中!我想知道这两个问题是否相关..

这是iOS错误吗?或者与科尔多瓦有什么关系?

2 个答案:

答案 0 :(得分:0)

看起来地图框架没问题,但地图没有渲染。 在ViewController中为mapView设置委托:
mapView.delegate = self;
并实现这些方法,您可以检查地图:

- (void)mapViewDidFailLoadingMap:(MKMapView *)mapView withError:(NSError *)error {
// here you can catch error if map failed
}
- (void)mapViewWillStartLoadingMap:(MKMapView *)mapView {
// here you can see when map starts loading
}
- (void)mapViewDidFinishLoadingMap:(MKMapView *)mapView {
// here you can see when map finishes loading
}

答案 1 :(得分:0)

我有点想出了问题。

它是由......的组合引起的。

  • Cordova状态栏插件 - >其中状态栏设置为在横向模式下隐藏
  • iOS 9
  • 设备以横向模式旋转,右侧是主页按钮
  • 错误计算MKMapView边界,导致其在设备屏幕外呈现

问题的根源在于:

MKMapView* mapView = [[MKMapView alloc]initWithFrame:CGRectMake(200, 62, 824, 708)];

如果你用708添加62,它等于770px,而我的设备高度只有768px,它会在设备屏幕上显示2px。

必须满足其中4个条件才能实现。

如果设备未处于横向模式,右侧是Home按钮,或者它在iOS 8上,或者您没有使用cordova状态栏插件(或类似的东西),或者边界设置正确,它不会发生。

难怪我在Google上搜索过,发现没有人遇到类似问题>。<

希望这些信息对某人有所帮助......但我对此表示怀疑。

最后,我选择修复我​​的边界计算,永远不要让它在设备屏幕之外渲染,一切正常。