有没有办法从 mkmapview 底部操纵、移动苹果徽标和“合法”文本?
类似于谷歌地图。
您可以通过设置
layoutMargins
的mapView
来更改它。例如,这会将其从底部移出:
mapView.layoutMargins.bottom = -100 // removes the 'legal' text
mapView.layoutMargins.top = -100 // prevents unneeded misplacement of the camera
如果您设置mapView布局边距,它将偏移地图中所有显示的内容(以注释等为中心)。
如果您只想移动 2 个项目,我建议添加这些扩展:
extension MKMapView {
var logoView: UIView? {
for subview in subviews {
if String.init(describing: subview).localizedCaseInsensitiveContains("MKAppleLogoImageView") {
return subview
}
}
return nil
}
var legalView: UIView? {
for subview in subviews {
if String.init(describing: subview).localizedCaseInsensitiveContains("MKAttributionLabel") {
return subview
}
}
return nil
}
func moveLogoView(x: CGFloat, y: CGFloat) {
logoView?.moveOrigin(x: x, y: y)
}
func moveLegalView(x: CGFloat, y: CGFloat) {
legalView?.moveOrigin(x: x, y: y)
}
}
extension UIView {
func moveOrigin(x: CGFloat, y: CGFloat) {
let originX = self.frame.origin.x
let originY = self.frame.origin.y
self.frame.origin = CGPointMake(originX + x, originY + y)
}
}
然后,地图加载后就可以使用了。在 viewDidLoad() 中与 DispatchQueue.main.asyncAfter 或 didLayoutSubviews() 一起工作
mapView.moveLogoView(x: -40, y: 60)
mapView.moveLegalView(x: 20, y: 60)