Ios 在SwiftUI NavigationView中,UIViewRepresentable存在问题
这是我的Ios 在SwiftUI NavigationView中,UIViewRepresentable存在问题,ios,swift,swiftui,xcode11,Ios,Swift,Swiftui,Xcode11,这是我的ContentView.swift文件: struct ContentView: View { var body: some View { NavigationView { MapView() } } } struct MapView: UIViewRepresentable { func makeUIView(context: Context) -> MKMapView { let
ContentView.swift
文件:
struct ContentView: View {
var body: some View {
NavigationView {
MapView()
}
}
}
struct MapView: UIViewRepresentable {
func makeUIView(context: Context) -> MKMapView {
let mapView = MKMapView(frame: .zero)
return mapView
}
func updateUIView(_ view: MKMapView, context: Context) {
print("test")
}
}
这是我的MapView.swift
文件:
struct ContentView: View {
var body: some View {
NavigationView {
MapView()
}
}
}
struct MapView: UIViewRepresentable {
func makeUIView(context: Context) -> MKMapView {
let mapView = MKMapView(frame: .zero)
return mapView
}
func updateUIView(_ view: MKMapView, context: Context) {
print("test")
}
}
有了这些代码行,当我运行应用程序时,它会在控制台中打印两次test
但是当我更改ContentView
并从中隐藏NavigationView
时,如下所示:
struct ContentView: View {
var body: some View {
// NavigationView {
MapView()
// }
}
}
现在它在控制台中打印一个test
实际上,这意味着当我们将NavigationView
与uiviewsrepresentable
一起使用时,它调用了两次updateUIView
func,似乎是错误的
我们该如何处理呢?SwiftUI可能在任何时候都需要视图来重新计算他们的身体。您不应该太担心框架的内部工作。如果您在
updateUIView()
中做了您应该做的事情,那么一切都应该很好。如果<代码> UpDATUIVIEW()/代码>运行两次对你来说是个问题,请考虑解释为什么,我在地图的中心有一个标记。所以当用户点击它时,我想在地图中添加注释。所以用户可以更改区域并再次点击。但它也有一个后退按钮
。当用户点击back时,我想从地图中删除最后一条注释。但是在这种情况下,当updateUIView
调用两次或两次以上时,annotations
在错误的索引中被删除。WIFTUI可能在任何时候都需要视图来重新计算它们的主体。您不应该太担心框架的内部工作。如果您在updateUIView()
中做了您应该做的事情,那么一切都应该很好。如果<代码> UpDATUIVIEW()/代码>运行两次对你来说是个问题,请考虑解释为什么,我在地图的中心有一个标记。所以当用户点击它时,我想在地图中添加注释。所以用户可以更改区域并再次点击。但它也有一个后退按钮
。当用户点击back时,我想从地图中删除最后一条注释。但在这种情况下,当updateUIView
调用两次或两次以上时,annotations
在错误的索引中被删除