首页 > 解决方案 > MKCoordinateRegionMakeWithDistance 在 iphoneX 上给出错误的结果

问题描述

当使用 MKCoordinateRegionMakeWithDistance 为 MKMapView 设置区域时,生成的区域总是给出错误的结果,其中大小总是比我为其他手机型号获得的最佳尺寸略大。

例如,做:

let region         = MKCoordinateRegionMakeWithDistance(someLocation, 400, 200)
let adjustedRegion = mapView.regionThatFits(region)
mapView.setRegion(adjustedRegion, animated: true)

(mapview的纵横比定义为2:1)

总是会产生一个垂直 420 m,水平 210~ m 的视图,而其他手机型号不会发生这种情况。

可以理解的是,它的目的是找到指定尺寸的“最佳拟合”区域,我担心的是结果在 iPhone X 上有所不同。(在型号 8、8+、5s 上)

我需要专门为带有 mapViews 的 iPhone X 型号做些什么吗?

标签: swiftmapkitiphone-x

解决方案


事实证明,mapkit 的 mapView 的 MKCoordinateRegionMakeWithDistance 在没有安全区域插图的情况下进行计算。

由于我的 mapView 设置在屏幕底部,因此在应用垂直距离时,需要进行一些减少以补偿这种奇怪的行为。

let verticalDistance = 400 * ((mapView.bounds.height - mapView.safeAreaInsets.bottom) / mapView.bounds.height )
let region         = MKCoordinateRegionMakeWithDistance(someLocation, verticalDistance, 200)
let adjustedRegion = mapView.regionThatFits(region)
mapView.setRegion(adjustedRegion, animated: true)

这允许 mapView 的结果区域在垂直和水平距离上是正确的(与谷歌地图的网络距离测量工具相比)


推荐阅读