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

列表中的 SwiftUI NavigationLinks 加载 NSViewDelegate/NSViewControllerDelegate 两次

如何解决列表中的 SwiftUI NavigationLinks 加载 NSViewDelegate/NSViewControllerDelegate 两次

我目前正在涉足 macOS 开发,并尝试将一些 AppKit 组件封装到 SwiftUI 中。我在 NavigationLink 中使用带有 List侧边栏导航。当使用 NSViewRepresentableNSViewControllerRepresentable 作为目标时,makeNSView/makeNSViewController 方法会被调用两次。我想这是一个错误,因为当我将 NavigationLink 直接包装在 NavigationView 中时它似乎工作正常?有没有其他人遇到过这个问题,可以帮我解决一个解决方法,直到它得到修复?

重现的最小实现:

import SwiftUI

struct ViewRepresentable: NSViewRepresentable {
    let title: String
    
    
    func updateNSView(_ nsView: NSView,context: Context) {
    }

    func makeNSView(context: Context) -> NSView {
        print("\(title) make view called")
        return NSView()
    }
}

struct ContentView: View {
    enum NavigationItem {
        case sel1
        case sel2
    }

    @State private var selection: NavigationItem? = .sel1

    var body: some View {
        NavigationView {
            List(selection: $selection) {
                NavigationLink(
                        destination: EmptyView().navigationTitle("Dashboard"),tag: NavigationItem.sel1,selection: $selection
                ) {
                    Label("Dashboard",systemImage: "globe")
                }.tag(NavigationItem.sel1)
                NavigationLink(
                        destination: ViewRepresentable(title: "TestView").navigationTitle("TestView"),tag: NavigationItem.sel2,systemImage: "globe")
                }.tag(NavigationItem.sel2)
            }
                .padding(.top,16)
                .navigationTitle("SomeApp")
                .listStyle(SidebarListStyle())
        }.frame(minWidth: 1000,idealWidth: 1200,maxWidth: .infinity,minHeight: 600,idealHeight: 800,maxHeight: .infinity,alignment: .center)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

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