如何解决MapKit错误:在渲染其SwiftUI内容时,NSHostingView被重新布置
我已经使用MapKit实现了Apple SwiftUI教程的稍微改动的版本。
当我运行它时,我收到错误消息并调整我得到的相应视图的大小:
[SwiftUI] NSHostingView is being laid out reentrantly while rendering its SwiftUI content. This is not supported and the current layout pass will be skipped.
MapView(coordinate: location?.coordinates)
.frame(minHeight: 200)
.overlay(
GeometryReader{
proxy in
Button("Open in Maps") {
if (self.location?.coordinates != nil){
let destination = MKMapItem(placemark: MKPlacemark(coordinate: self.location!.coordinates))
destination.name = "the car"
destination.openInMaps()
}
}
.frame(width: proxy.size.width,height: proxy.size.height,alignment: .bottomTrailing)
.offset(x: -10,y: -10)
}
)
MapView结构:
import SwiftUI
import MapKit
/// a view containing the map
struct MapView: NSViewRepresentable {
/// the location coordinates
var coordinate: CLLocationCoordinate2D?
func makeNSView(context: Context) -> MKMapView {
MKMapView(frame: .zero)
}
func updateNSView(_ nsView: MKMapView,context: Context) {
let span = MKCoordinateSpan(latitudeDelta: 0.02,longitudeDelta: 0.02)
var region: MKCoordinateRegion = MKCoordinateRegion()
if (self.coordinate != nil){
region = MKCoordinateRegion(center: coordinate!,span: span)
}
nsView.setRegion(region,animated: true)
if ((nsView.annotations.count == 0) && (self.coordinate != nil)){
let locationPin: MKPointAnnotation = MKPointAnnotation()
locationPin.coordinate = coordinate!
nsView.addAnnotations([locationPin])
}
}
}
解决方法
得到同样的消息并拼命尝试在 main.sync 中进行第一次调度,但在运行时出现异常。
然后我只是尝试了异步。
{
let region = MKCoordinateRegion(center: visibleArea.coordinate,latitudinalMeters: 200,longitudinalMeters: 200)
DispatchQueue.main.async
{
nsView.setRegion(region,animated: false)
}
}
也适用于动画
DispatchQueue.main.async
{
nsView.setRegion(region,animated: true)
}
实际上,这暂时奏效了:它删除了
- Xcode (12.3) 中的紫色信息消息
- 删除控制台消息
希望这只是一个小补丁,直到 Apple 清理它(或解释原因)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。