swift - mapkit:适合的区域无法正确呈现

标签 swift mapkit swift2 mkcoordinateregion mkcoordinatespan

我有一段代码可以确定最佳 region.span.latitudeDeltaregion.span.longitudeDelta。它找到左上角和右下角,并计算纬度坐标和经度坐标之间的差异。

我遇到的问题是渲染实际上与我在执行时设置的不同:

region = self.regionThatFits(region)
self.setRegion(region, animated: true)

例如,如果我首先选择要渲染的项目(比方说从表格中),然后切换到 map ,我得到的结果(视觉上)与显示不同 map 上的所有然后选择我想保留的点。

更进一步,如果我渲染所有 map 上的点,然后选择一些并渲染选定的,然后移除过滤器并渲染所有 , map 与我开始时不一样 - 它显示了所有点,但与初始 View 相比更小(看起来缩小了)。

在调试时,我可以看到两种情况都生成了相同的跨度值,但渲染似乎忽略了它们。从调试使用(英国的选定点):

  1. 加载所有点:

    region.span.latitudeDelta 7.439768

    region.span.longitudeDelta 11.0

  2. 过滤点:

    区域.span.latitudeDelta 1.25

    region.span.longitudeDelta 10.50477

  3. 删除过滤器:

    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 看起来就好像它被缩小了,尽管调试输出显示否则......

下面是来自不同场景的两张图片。任何建议将不胜感激。

谢谢!

  1. 图片 1 - 我在表格中应用过滤器,然后导航至 map : enter image description here

  2. 图片 2 - 导航到 map 然后应用过滤器: enter image description here

最佳答案

在对布局、框架和边界等进行广泛调试后,这就是正在发生的事情:

当第一次加载包含 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/

相关文章:

ios - layoutIfNeeded() 上的模糊崩溃

swift - 正确使用Alamofire队列

licensing - IOS6 Mapkit 许可、使用条款

ios - 将 MKOverlay 转换为 MKPolyline 返回 null

ios - 从初始值开始 UIStepper

ios - Apple SwiftUI 教程是否有错误?还是 Xcode 的错误?

swift - Swift 如何有多个 init()

ios - 如何将来自 MapKit 注释的信息发送到新的 View Controller

ios - 可选类型 EKReminder 的值未解包

ios - Swift 2 游戏主菜单