swift - 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 型号做些什么吗?
解决方案
事实证明,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 的结果区域在垂直和水平距离上是正确的(与谷歌地图的网络距离测量工具相比)
推荐阅读
- vue.js - gojs 与 vuejs 和 webpack
- iphone - CGContextDrawImage 渲染模糊的文本和图像
- c++ - C++ 中 c_str() 和 char* 的不等式
- ruby-on-rails - 在 Rails 应用程序中发送电子邮件而不使用数据库模型
- c++ - 我如何找到为什么虚拟内存足迹随着这个守护进程不断增长?
- node.js - NodeJS - 使用 mp3 音频“块”将音频直播到特定 URL
- python - 如何使用用户的输入在课堂上创建实例?
- kubernetes - Kubernetes pod 无法访问
- javascript - 谷歌脚本数组“为”性能
- c - 我怎样才能让我的词法分析器程序打印出不仅仅是分隔符?