问题描述
我已将我的地图视图连接到一组自定义 Product
对象,这些对象存储每个注释的相关详细信息(称为 MapAnnotationButton
的自定义注释)。
有可能进行搜索,并且每次将搜索请求发送到我的后端时,响应都会被转换为 Product
对象并保存到数组中(数组的先前内容正在被清除)。然而,由于某种原因,在第一次搜索后,我的地图注释混淆了。每次搜索(相同的短语)时,它都会被打乱。虽然从来没有第一次。
我已经检查过了,但即使在注释创建块中,坐标和名称和其他属性也匹配。
import SwiftUI
import MapKit
struct MapView: View {
@State var keyword = ""
@State private var region = MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: 0,longitude: 0),span: MKCoordinateSpan(latitudeDelta: 0.1,longitudeDelta: 0.1))
@State var products: [Product] = []
var body: some View {
ZStack(alignment: Alignment(horizontal: .center,vertical: .top),content: {
Map(coordinateRegion: $region,annotationItems: self.products,annotationContent: { current_item in
MapAnnotation(coordinate: current_item.location?.CLcoordinates ?? CLLocationCoordinate2D(latitude: 1000,longitude: 1000)) {
MapAnnotationButton(item: current_item)
}
})
TextField("Search",text: $keyword,onEditingChanged: { editing in
},onCommit: {
UIApplication.shared.endEditing()
BackendClient.shared.query(keyword: keyword) { products,success in
self.products = products ?? []
}
})
})
}
}
我的解释是,当注释创建块被调用时,根据其内容,大约是 products
中包含的项目数量的 2 到 4 倍,可能在正确的项目上方有注释。这意味着它只有在实际上只有其他注释阻止下面正确的注释时才会出现混淆。
尽管如此,每个注释实际上都应该在正确的位置上,决不允许这样的事情发生。
我会非常感谢您的提示和想法! 谢谢!
第一次搜索:
二次搜索:
解决方法
据我所知,SwiftUI 框架中存在漏洞。出于某种原因,如果视图位于单独的结构中,它们将不会更新。如果我从 MapAnnotationButton 直接复制到 MapAnnotation 视图块中,则一切正常。
我已经提交了一份雷达。
感谢您的评论!