MKMapView 布局边距未更新

问题描述 投票:0回答:0

我正在尝试使用布局边距移动 MKMapView() 的兴趣中心。 它可以工作,但只有在初始化时我才能更改值或执行地图不会更新边距的任何操作。

地图视图:

import SwiftUI
import MapKit

struct MapView: UIViewRepresentable {
    
    @StateObject var manager: StateManager
    @ObservedObject private var locationManager = LocationManager()
    
    var mapView = MKMapView()
    
    func makeUIView(context: Context) -> MKMapView {
        print("NEW MAP VIEW")
        mapView.delegate = context.coordinator
        mapView.isRotateEnabled = true
        mapView.showsUserLocation = true

        // This one works well
        mapView.directionalLayoutMargins = NSDirectionalEdgeInsets(
            top: 0.0,
            leading: 0.0,
            bottom: 100.0,
            trailing: 0.0
        )

        return mapView
    }

    // ...
}

extension MapView {
    func margins( vertical: CGFloat ) -> some View {
        print("margins", mapView.directionalLayoutMargins.bottom, "<->", vertical)
        mapView.directionalLayoutMargins = NSDirectionalEdgeInsets(
            top: 0.0,
            leading: 0.0,
            bottom: vertical,
            trailing: 0.0
        )
        return self
    }

    // ...
}

打印发生并且值(垂直)正确,但

mapView.directionalLayoutMargins.bottom
返回
0.0
,尽管从
100.0
卡在
init()

完成这里的愿景是主视图:

struct HomeView: View {
    
    @StateObject private var manager: StateManager = StateManager()
    
    @State private var margins: CGFloat = 80.0
    
    var body: some View {
        ZStack(alignment: .leading) {
            MapView(manager: manager)
                .margins(
                    vertical: manager.verticalMargin
                )
                .ignoresSafeArea()
            
            SheetView(manager: manager)
        }
        .ignoresSafeArea()
    }
}

知道如何解决此问题吗?

谢谢!

swift swiftui mapkit layoutmargins
© www.soinside.com 2019 - 2024. All rights reserved.