8

我正在尝试将应用程序迁移到 iOS 11,并且几天来我一直被一个又一个丑陋的 UI 错误所困扰。这次:MKMapView。我有一堆按钮,我固定在安全区域布局指南上,一切正常 - 除了 MKMapView。

它完全忽略了安全区域,因此指南针和法律按钮隐藏在条形或我自己的 UI 元素下。为了验证,我创建了一个只有一个普通 UIViewController 的新项目。然后我添加了一个 MKMapView 并配置了自定义的“additionalSafeAreaInsets”,它们确实被完全忽略了。

更糟糕的是,即使只有 MKMapView,法律标签在 iPhone X 上看起来也非常错误。

问题:有什么方法可以插入法律标签和指南针,以免被自定义视图隐藏?

在此处输入图像描述

4

4 回答 4

1

正确的做法是设置additionalSafeAreaInsets包含MKMapView. 这样做将允许您根据需要调整指南针和“法律”标签,以适应地图顶部的自定义视图。

于 2018-06-05T20:23:51.447 回答
1

此问题的另一个解决方案是使用directionalLayoutMarginsiOS 11.0+ 中可用的 UIView 属性。这使您可以在绘制任何子视图(在本例中为法律注释)的内容之前指定视图的边距。

mapView.directionalLayoutMargins = NSDirectionalEdgeInsetsMake(0, 0, 25, 0);

于 2020-05-03T14:43:01.420 回答
1

唯一对我有用的解决方案

  1. 在 MapView 中禁用指南针
  2. 手动创建一个新的指南针按钮,只需将其放在您喜欢的任何位置

这是一个例子

    @IBOutlet weak var mapView: MKMapView! {
    didSet {
        let userTrackingButton = MKUserTrackingButton(mapView: mapView)
        userTrackingButton.layer.position = CGPoint(x: 100, y: 100)
        userTrackingButton.backgroundColor = UIColor.white

        let compassButton = MKCompassButton(mapView: mapView)
        compassButton.layer.position = CGPoint(x: 100, y: 150)
        compassButton.compassVisibility = .adaptive

        mapView.delegate = self
        mapView.showsUserLocation = true
        mapView.setUserTrackingMode(.follow, animated: true)
        mapView.addSubview(userTrackingButton)
        mapView.addSubview(compassButton)
    }
}
于 2018-06-13T22:28:18.957 回答
1

为我自己的一个项目研究这个,看起来界面生成器有一个解决方案:

在地图视图上,选择

在地图视图上,选择“Preserve Superview Margins”和“Safe area relative Margins”,法律+指南针将正确定位。

于 2018-12-02T15:40:22.837 回答