[英]MKMapView ignoring Safe Area on iOS 11 and iPhone X
我正在嘗試將應用程序遷移到 iOS 11,但幾天來我一直被一個丑陋的 UI 錯誤困擾。 這次:MKMapView。 我有一堆按鈕固定在安全區域布局指南上,一切正常 - 除了 MKMapView。
它完全忽略了安全區域,因此指南針和合法按鈕隱藏在欄或我自己的 UI 元素下。 為了驗證,我創建了一個只有一個普通 UIViewController 的新項目。 然后我添加了一個 MKMapView 並配置了自定義的“additionalSafeAreaInsets”,它們確實被完全忽略了。
更糟糕的是,即使只有 MKMapView,iPhone X 上的法律標簽看起來也大錯特錯。
問題:有什么方法可以插入合法標簽和指南針,以免被自定義視圖隱藏?
正確的方法是設置包含MKMapView
的視圖控制器的additionalSafeAreaInsets
。 這樣做將允許您根據需要調整指南針和“法律”標簽,以適應地圖頂部的自定義視圖。
唯一的解決方案對我有用
這是一個例子
@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)
}
}
此問題的另一個解決方案是使用 iOS 11.0+ 中可用的 UIView 的directionalLayoutMargins
屬性。 這使您可以在繪制任何子視圖(在本例中為法律注釋)的內容之前指定視圖的邊距。
mapView.directionalLayoutMargins = NSDirectionalEdgeInsetsMake(0, 0, 25, 0);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.