ios - 旋转后 MKAnnotationView 标注未正确放置

标签 ios rotation mkmapview mkannotation

如果当我将手机从垂直垂直旋转到垂直紧凑时显示标注,旋转后标注部分位于导航栏下方。

如何让标注最终完全包含在 map 中?

Callout Cuff Off 这是垂直紧凑型手机。出于专有原因,我切断了一些屏幕。

编辑2

一位本地社区成员发布了以下代码,以防止我在下面提示的 willTransitionTo 中的缩放。

if let annotation = self.mapView.selectedAnnotations.first {
    var region = self.mapView.region
    region.center = annotation.coordinate
    self.mapView.setRegion(region, animated: true)
}

它非常有效地防止了缩放并且只导致居中。不幸的是,标注仍然部分在屏幕之外。如果我在选择图钉时更改 setCenter,不幸的是会导致标注以不同的方式离开屏幕。 (我已经找到了一个关于取消选择/选择的 hacky 解决方法,在下面引用。)

编辑 1

  • 我发现出于某种原因,调用 setCenter 也会导致缩放,但我找不到导致缩放的地方。所以,这不好。
  • 我尝试在 willTransitionTo 期间以注释为中心。这根本没有改变标注的位置,只是缩放了 map 。 (见上一点。)
  • 我尝试取消选择然后重新选择 willTransitionTo 中的注释。我在标注消失和重新出现之间停顿了很长时间。此外,还有缩放功能(见上文)。 但是,标注在 map 的框架内。由于“闪光灯”和缩放功能,我不会使用此选项。 (让我晕船。)

旧的建议答案

虽然我仍然认为这是一个有效的观点

  • 景观中的 SE 在 map 下有更多内容只是太短而无法拥有功能 map 。

我尝试过的

  • regionDidChange 不调用然后设备旋转
  • 我尝试在旋转时检查注释 View 的框架 (willTransitionTo)。该框架已包含在 map 框架中
  • 我确认我的 map View 的顶部已固定到顶部布局指南
  • 我查看了 View 层次结构调试器,似乎有三个“私有(private)”元素的原点在 map View 之外,但我不知道如何处理这些信息。 (第一个UIView包含在MKPinAnnotationView_UIPopoverViewUIView包含在UIView 包含在 _MKCalloutBackgroundMaskView)
  • 我没有在 viewForAnnotation 中设置特定的框架

其他可能相关的注释

  • 我正在通过更改 canShowCallout 上的属性来做一些奇怪的事情,因为我想在选择 pin 后居中。但问题出在轮换上,并且此代码不会在轮换时再次调用。
  • 我确实需要考虑“横向”中的 SE,这可能是问题的一部分。

感谢所有帮助。特别是显示在阅读方向等。

最佳答案

一位同事向我指出了这个 answer to MKAnnotation image offset with custom pin image .

我现在设置

annotationView.layer.anchorPoint = CGPoint(x: 0, y: 0)

viewFor annotation 中,它正在工作。

老实说,我不明白为什么这会解决问题,所以非常感谢解释原因的评论/编辑/答案。

关于ios - 旋转后 MKAnnotationView 标注未正确放置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42074974/

相关文章:

ios - 如何强制释放 UIButton(即使用户仍持有它?)

rotation - Xcode 6 自动布局仅限纵向

mysql - 如何复制锁定的 mySQL 表?

iphone - 仅在为模拟器构建时复制符号

iphone - 导航 Controller 中的选项卡栏 Controller 确实可以工作,但是引用文献说它不会

ios - iOS 中的 GPS 导航

php - 为什么在 PHP 中调整上传图片大小时我的图片会旋转?

iphone - 如何将 uibutton 添加到自定义注释 View

ios - MKMapView cornerRadius 仅适用于左上角

iOS MapView : Add Annotation on tap, 但如果现有注释被点击则不会