微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SwiftUI Map 混淆注释

如何解决SwiftUI Map 混淆注释

我已将我的地图视图连接到一组自定义 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 倍,可能在正确的项目上方有注释。这意味着它只有在实际上只有其他注释阻止下面正确的注释时才会出现混淆。 尽管如此,每个注释实际上都应该在正确的位置上,决不允许这样的事情发生。

我会非常感谢您的提示和想法! 谢谢!

第一次搜索

First time searching

二次搜索

Second time searching

解决方法

据我所知,SwiftUI 框架中存在漏洞。出于某种原因,如果视图位于单独的结构中,它们将不会更新。如果我从 MapAnnotationButton 直接复制到 MapAnnotation 视图块中,则一切正常。

我已经提交了一份雷达。

感谢您的评论!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。