【问题标题】:MKMapView ignoring Safe Area on iOS 11 and iPhone XMKMapView 忽略 iOS 11 和 iPhone X 上的安全区域
【发布时间】:2017-11-23 09:39:07
【问题描述】:

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

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

更糟糕的可能是即使只有 MKMapView,法律标签在 iPhone X 上看起来也很糟糕。

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

【问题讨论】:

  • 然后在uiview里面取mapview?
  • 这似乎已从 iOS 11.1 停止工作。我已经尝试了我找到的所有解决方案,但也无法让它工作。我也看到了这方面的雷达,所以我猜这是一个 iOS 错误,将被修复。
  • 你在使用约束和自动布局吗?

标签: ios iphone mapkit mkmapview safearealayoutguide


【解决方案1】:

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

【讨论】:

  • 有趣,@dbart,你从哪里得到的信息?
  • 安全区域插入用于调整滚动视图内的内容偏移量(想想UITableViewUICollectionView)。 MKMapView 只是一个更复杂的滚动视图,它使用这些插图来对齐浮动内容,例如“合法”标签和指南针。
【解决方案2】:

唯一对我有用的解决方案

  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)
    }
}

【讨论】:

  • 谢谢!看来这是自iOS11以来最正确的。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

    • 其他任何人都曾发现自己正在寻找问题的解决方案,却发现他们最近已经解决了问题,但不知何故完全忘记了这个事实。 :-/
    猜你喜欢
    • 2018-03-02
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-26
    • 2018-04-28
    • 2022-08-19
    相关资源
    最近更新 更多