iOS15下[MKMapView setRegion:]设置地图区域经度异常问题求助
MKMapView setRegion: 方法iOS15经度显示异常兼容方案
问题原因
iOS 15 对 MKMapView 的 setRegion: 方法的内部渲染逻辑做了调整,当你设置的经度跨度(longitudeDelta)为360度(即覆盖全球所有经度范围)时,系统不会保留开发者传入的原始中心经度,会自动调整为渲染逻辑下的默认等效值,导致你传入的-112度经度被替换为地球对向的68度经度。iOS 14 及更早版本没有该优化逻辑,会保留开发者传入的原始中心经度值。
解决方案
方案1:缩小经度跨度(无全球展示需求时使用)
如果你的业务不需要展示全球范围的地图,直接将经度跨度调整为小于180度的数值即可,系统不会触发自动调整逻辑:
// 原代码为mapRegion.span.longitudeDelta = 360,修改为小于180的数值即可 mapRegion.span.longitudeDelta = 80
方案2:强制重置中心坐标(需要全球展示时使用)
如果你确实需要展示全球范围的地图,在调用setRegion:之后额外设置一次中心坐标,覆盖系统自动调整的结果即可:
mapView.setRegion(mapRegion, animated: true) // 新增下行强制指定中心坐标 mapView.centerCoordinate = CLLocationCoordinate2DMake(44, -112)
方案3:添加系统版本兼容判断
如果需要同时适配多版本系统,可以增加系统版本判断区分处理:
let targetCenter = CLLocationCoordinate2DMake(44, -112) mapRegion.center = targetCenter mapRegion.span.latitudeDelta = 80 mapRegion.span.longitudeDelta = 360 if #available(iOS 15, *) { mapView.setRegion(mapRegion, animated: true) mapView.centerCoordinate = targetCenter } else { mapView.setRegion(mapRegion, animated: true) }
内容的提问来源于stack exchange,提问作者HongchaoZhang
相关产品推荐
相关产品推荐

