我有一段代码可以确定最佳 region.span.latitudeDelta
和 region.span.longitudeDelta
。它找到左上角和右下角,并计算纬度坐标和经度坐标之间的差异。
我遇到的问题是渲染实际上与我在执行时设置的不同:
region = self.regionThatFits(region)
self.setRegion(region, animated: true)
例如,如果我首先选择要渲染的项目(比方说从表格中),然后切换到 map ,我得到的结果(视觉上)与显示不同 map 上的所有点然后选择我想保留的点。
更进一步,如果我渲染所有 map 上的点,然后选择一些并渲染选定的,然后移除过滤器并渲染所有 , map 与我开始时不一样 - 它显示了所有点,但与初始 View 相比更小(看起来缩小了)。
在调试时,我可以看到两种情况都生成了相同的跨度值,但渲染似乎忽略了它们。从调试使用(英国的选定点):
加载所有点:
region.span.latitudeDelta 7.439768
region.span.longitudeDelta 11.0
过滤点:
区域.span.latitudeDelta 1.25
region.span.longitudeDelta 10.50477
删除过滤器:
region.span.latitudeDelta 7.439768
region.span.longitudeDelta 11.0
在我重新渲染之前(而不是仅仅在 viewDidLoad 上),我尝试将 map 重新置于固定坐标的中心,但没有任何区别。
我想强调的是,每次运行上述序列时, map 并不会一直缩小。它有点缩小一次,仅此而已。
我是否遗漏了一个明显的步骤?我需要设置一个隐藏的 bool 值?还有别的吗?
我还尝试将 regionThatFits 更改为
regionToRender = MKCoordinateRegionMake(region.center, region.span)
我也尝试了以下方法:
func mapView(mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
self.mapView.region = mapView.region
}
无论我做什么,如果我已经在 map 上时应用注释过滤器,它看起来就像实际跨度增加/加倍(或者好像 map 边缘周围有一个强制框架)使 map 看起来就好像它被缩小了,尽管调试输出显示否则......
下面是来自不同场景的两张图片。任何建议将不胜感激。
谢谢!
最佳答案
在对布局、框架和边界等进行广泛调试后,这就是正在发生的事情:
当第一次加载包含 map 的 ViewController 时, map 实际上并不适合 View 。准确地说,它以自由形式加载,实际上分别为 600x492 WxH。 492的高度简直就是:
free form height - NavCon Height - ToolBar Height - default margin (battery etc.)
在渲染注释的第一遍之后(在 viewDidAppear 中有效),MapView 获得正确的高度(在 iphone 4s 上)372。这很简单:
screen height (480) - NavCon Height - ToolBar Height - default margin
因此,从这一点开始的任何渲染都会产生类似缩小的效果(使一切看起来更小)。
解决方案是计算 mapView 将获取的大小并在 viewDidLoad 中设置。此外,您可能还应该设置 mapView autoresizing mask 以匹配父 View :
self.mapView.autoresizingMask = self.view.autoresizingMask
希望对您有所帮助。
关于swift - mapkit:适合的区域无法正确呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32949735/