有没有办法从mkmapview的底部操作,移动苹果的标志和“法律的”文本?就像谷歌Map一样。
的数据
htrmnn0y1#
您可以通过设置mapView的layoutMargins来更改它。例如,这将从底部移出:
mapView
layoutMargins
mapView.layoutMargins.bottom = -100 // removes the 'legal' text mapView.layoutMargins.top = -100 // prevents unneeded misplacement of the camera
字符串
您可以将负填充添加到贴图,然后将其裁剪为正常显示,如:
Map(){ } .padding(.vertical, -100) .clipped()
型
ar5n3qh52#
如果你设置了mapView layoutMargins,它将偏移Map中所有显示的内容(以注解等为中心)。如果你只想移动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) } }
字符串然后,这些可以在加载Map后使用。在viewDidLoad()中使用DispatchQueue.main. discAfter或didLayoutSubviews()
mapView.moveLogoView(x: -40, y: 60) mapView.moveLegalView(x: 20, y: 60)
2条答案
按热度按时间htrmnn0y1#
UIKit
您可以通过设置
mapView
的layoutMargins
来更改它。例如,这将从底部移出:字符串
SwiftUI
您可以将负填充添加到贴图,然后将其裁剪为正常显示,如:
型
ar5n3qh52#
如果你设置了mapView layoutMargins,它将偏移Map中所有显示的内容(以注解等为中心)。
如果你只想移动2个项目,我建议添加这些扩展:
字符串
然后,这些可以在加载Map后使用。在viewDidLoad()中使用DispatchQueue.main. discAfter或didLayoutSubviews()
型