我正在尝试使用布局边距移动 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()
}
}
知道如何解决此问题吗?
谢谢!