簡體   English   中英

MKMapView 在 iOS 11 和 iPhone X 上忽略安全區域

[英]MKMapView ignoring Safe Area on iOS 11 and iPhone X

我正在嘗試將應用程序遷移到 iOS 11,但幾天來我一直被一個丑陋的 UI 錯誤困擾。 這次:MKMapView。 我有一堆按鈕固定在安全區域布局指南上,一切正常 - 除了 MKMapView。

它完全忽略了安全區域,因此指南針和合法按鈕隱藏在欄或我自己的 UI 元素下。 為了驗證,我創建了一個只有一個普通 UIViewController 的新項目。 然后我添加了一個 MKMapView 並配置了自定義的“additionalSafeAreaInsets”,它們確實被完全忽略了。

更糟糕的是,即使只有 MKMapView,iPhone X 上的法律標簽看起來也大錯特錯。

問題:有什么方法可以插入合法標簽和指南針,以免被自定義視圖隱藏?

在此處輸入圖片說明

正確的方法是設置包含MKMapView的視圖控制器的additionalSafeAreaInsets 這樣做將允許您根據需要調整指南針和“法律”標簽,以適應地圖頂部的自定義視圖。

唯一的解決方案對我有用

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

為我自己的一個項目研究這個,看起來界面構建器有一個解決方案:

在地圖視圖中,選擇“Preserve Superview Margins”和“Safe area relative Margins”

在地圖視圖中,選擇“Preserve Superview Margins”和“Safe area relative Margins”,legal + compass 將被正確定位。

此問題的另一個解決方案是使用 iOS 11.0+ 中可用的 UIView 的directionalLayoutMargins屬性。 這使您可以在繪制任何子視圖(在本例中為法律注釋)的內容之前指定視圖的邊距。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM