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

iOS MKMapView shows blank map if initialized in landscape mode while home button is on the right

我正在尝试将 MKMapView 与我基于 Cordova 的应用程序一起使用,一切似乎都运行良好,除非我在设备处于横向模式且主页按钮位于右侧时使用代码对其进行初始化:

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

地图显示为空白,只有 'Legal' 字样出现在地图的一角。

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

而且在纵向模式下,每次都工作正常...

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

这是 iOS 错误吗?或者与 Cordova 有关?

看起来地图框没问题,但地图没有渲染。 在您的 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
}

我有点想通了。

这是由...的组合引起的

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

问题根源在线:

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

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

必须满足其中 4 个条件才能发生。

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

难怪我在 Google 上搜索,没有发现类似问题 >.<

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

最后我选择修复我​​的边界计算,从不让它呈现在设备屏幕之外,一切正常。