如果当我将手机从垂直垂直旋转到垂直紧凑时显示标注,旋转后标注部分位于导航栏下方。
如何让标注最终完全包含在 map 中?
这是垂直紧凑型手机。出于专有原因,我切断了一些屏幕。
编辑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
,_UIPopoverView
,UIView
包含在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/