MKCoordinateRegionMakeWithDistance дает неправильные результаты на iphoneX - PullRequest
0 голосов
/ 25 мая 2018

При настройке региона для MKMapView с помощью MKCoordinateRegionMakeWithDistance результирующий регион всегда дает неправильные результаты, где размер всегда немного больше, чем наилучшее соответствие, которое я получу для других моделей телефонов.

, например,делать:

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

(вертикальные и горизонтальные соотношения вида карты определены как равные 2: 1)

всегда приведет к виду, который даст мне 420 м по вертикали, 210 ~м по горизонтали, хотя это не происходит для других моделей телефонов.

Понятно, что это означает, что нужно найти область «наилучшего соответствия» для указанных размеров, меня беспокоит то, что результаты на iPhone X отличаютсяв частности.(на моделях 8, 8+, 5 с)

Что мне нужно сделать специально для моделей iPhone X с mapViews?

1 Ответ

0 голосов
/ 25 мая 2018

Оказывается, MKCoordinateRegionMakeWithDistance из mapkit mapView выполняет свои вычисления без вставок безопасной области.

Так как мой 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 должна быть правильной на вертикальном и горизонтальном расстоянии (по сравнению с инструментом измерения расстояния в веб-карте Google)

...