地图盒&x2B;SwiftUI:UI刷新未传播

地图盒&x2B;SwiftUI:UI刷新未传播,swiftui,mapbox,mapbox-ios,Swiftui,Mapbox,Mapbox Ios,我使用以下示例将Mapbox与SwiftUI集成: 它很好用。但是,当试图在视图堆栈上显示其他@State变量时,UI刷新传播停止向下进入Mapbox调用updateUI视图() 例如,您可以通过将上述存储库中的ContentView.swift替换为以下代码来复制问题: import SwiftUI import Mapbox struct ContentView: View { @State var annotations: [MGLPointAnnotation] = [

我使用以下示例将Mapbox与SwiftUI集成:

它很好用。但是,当试图在视图堆栈上显示其他@State变量时,UI刷新传播停止向下进入Mapbox调用
updateUI视图()

例如,您可以通过将上述存储库中的ContentView.swift替换为以下代码来复制问题:

import SwiftUI
import Mapbox

struct ContentView: View {

    @State var annotations: [MGLPointAnnotation] = [
        MGLPointAnnotation(title: "Mapbox", coordinate: .init(latitude: 37.791434, longitude: -122.396267))
    ]

    var body: some View {
        ZStack {
            VStack {
                MapView(annotations: $annotations).centerCoordinate(.init(latitude: 37.791293, longitude: -122.396324)).zoomLevel(16)
                Button(action: {
                    let rand = Float.random(in: 37.79...37.80)
                    self.annotations.append(MGLPointAnnotation(title: "Mapbox", coordinate: .init(latitude: CLLocationDegrees(rand), longitude: -122.396261)))
                }) {
                    Text("Button")
                    Text("\(self.annotations.count)")
                }
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
运行上述代码表示
文本(\(self.annotations.count)
UI得到更新-但是,注释不会被刷新(因此不会调用
updateUIView()

如果我注释
//Text(\(self.annotations.count)”
则刷新注释(并调用
updateUIView()

有人知道可能是什么问题吗?还是我在这里遗漏了什么


谢谢

多亏了这篇文章,我在这里回答了自己的问题

要使其正常工作,必须更新在Mapview中渲染的UIView:

func updateUIView(_ uiView: MGLMapView, context: Context) {
    updateAnnotations(uiView)
    trackUser()
}

private func updateAnnotations(_ view: MGLMapView) {
    if let currentAnnotations = view.annotations {
        view.removeAnnotations(currentAnnotations)
    }
    view.addAnnotations(annotations)
}

多亏了这篇文章,我在这里回答了自己的问题

要使其正常工作,必须更新在Mapview中渲染的UIView:

func updateUIView(_ uiView: MGLMapView, context: Context) {
    updateAnnotations(uiView)
    trackUser()
}

private func updateAnnotations(_ view: MGLMapView) {
    if let currentAnnotations = view.annotations {
        view.removeAnnotations(currentAnnotations)
    }
    view.addAnnotations(annotations)
}

你为什么不向地图盒所有者报告?我已经报告了,但是所有者建议也在地图盒上发布问题。你为什么不向地图盒所有者报告?我已经报告了,但是所有者建议也在地图盒上发布问题