從iOS8開始,MKMapView
擁有layoutMargin
屬性。設置此項時,centerRegion:
,showAnnotations:
以及試圖在地圖視圖中適合矩形的所有方法都會考慮上述佈局邊距。
如果您的半透明視圖的高度爲40點並附加到地圖視圖的頂部,設置mapView.layoutMargin = UIEdgeInsetMake(40, 0, 0, 0)
將會發揮魔力。
如果以iOS7爲目標,地圖視圖使用其包含控制器的頂部和底部佈局指南來抵消其內容。因此,您可以覆蓋控制器的topLayoutGuide
方法以返回所需的長度。
class ViewController: UIViewController {
override var topLayoutGuide: UILayoutSupport {
return MapLayoutGuide(length: 40)
}
}
class MapLayoutGuide: NSObject, UILayoutSupport {
var length: CGFloat
init(length: CGFloat) {
self.length = length
super.init()
}
@available(iOS 9.0, *)
var bottomAnchor: NSLayoutYAxisAnchor {
return NSLayoutYAxisAnchor()
}
@available(iOS 9.0, *)
var topAnchor: NSLayoutYAxisAnchor {
return NSLayoutYAxisAnchor()
}
@available(iOS 9.0, *)
var heightAnchor: NSLayoutDimension {
return NSLayoutDimension()
}
}
很好的回答!您可能需要在調用setVisibleMapRect之前設置_mapNeedsPadding = NO:在您的mapView上。否則會導致遞歸循環,導致訪問錯誤(我已編輯答案以反映相同。讓我知道,如果你不同意這個編輯) –