swift 移动苹果Map苹果标志“法律的”文本

zphenhs4  于 12个月前  发布在  Swift
关注(0)|答案(2)|浏览(149)

有没有办法从mkmapview的底部操作,移动苹果的标志和“法律的”文本?
就像谷歌Map一样。


的数据

htrmnn0y

htrmnn0y1#

UIKit

您可以通过设置mapViewlayoutMargins来更改它。例如,这将从底部移出:

mapView.layoutMargins.bottom = -100 // removes the 'legal' text
mapView.layoutMargins.top = -100 // prevents unneeded misplacement of the camera

字符串

SwiftUI

您可以将负填充添加到贴图,然后将其裁剪为正常显示,如:

Map(){ }
    .padding(.vertical, -100)
    .clipped()

ar5n3qh5

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)

相关问题