【问题标题】:Erratic navigation view in macOS app with SwiftUI使用 SwiftUI 的 macOS 应用程序中的导航视图不稳定
【发布时间】:2019-08-01 13:43:28
【问题描述】:

我正在尝试使用 SwiftUI 为 macOS 应用程序创建主/详细视图。目标是在侧栏中选择一个项目并相应地更改主视图。我的这个例子的代码如下所示:

import SwiftUI

struct MyMasterView: View {

    let names = ["Homer", "Marge", "Bart", "Lisa"]

    var body: some View {

        List {
            ForEach(names, id: \.self) { name in
                NavigationLink(name, destination: MyDetailView(name: name))
            }
        }
        .frame(width: 150, height: 300)

    }
}

struct MyDetailView: View {

    var name = "Name"

    var body: some View {

        HStack {
            Text("Hello \(name)")
                .font(.largeTitle)
        }
        .frame(width: 450, height: 300)

    }
}

struct ContentView: View {

    var body: some View {

        NavigationView {
            MyMasterView()
            MyDetailView()
        }
        .navigationViewStyle(DoubleColumnNavigationViewStyle())
        .frame(width: 600, height: 300)

    }
}

运行 Mac 应用程序时,侧栏选择可能会变为非活动状态,有时会出现弹出视图,而不是更改详细视图。有关该问题的屏幕截图,请参见下文。这是 Mac 上 SwiftUI NavigationView 的一个错误,还是我需要实现一些东西才能使其在 macOS 上工作?

https://youtu.be/BF7m1OszZ5w

【问题讨论】:

    标签: swift macos swiftui


    【解决方案1】:

    从 Xcode 11.0 (11A420a) 和 macOS Catalina (19A558d) 开始,NavigationView 按预期工作:

    import SwiftUI
    
    struct DetailView: View {
        let text: String
    
        var body: some View {
            Text(text)
                .frame(maxWidth: .infinity, maxHeight: .infinity)
        }
    }
    
    struct ContentView: View {
        private let names = ["Homer", "Marge", "Bart", "Lisa"]
        @State private var selection: String?
    
        var body: some View {
            NavigationView {
                List(selection: $selection) {
                    Section(header: Text("The Simpsons")) {
                        ForEach(names, id: \.self) { name in
                            NavigationLink(destination: DetailView(text: name)) {
                                Text(name)
                            }
                        }
                    }
                }.listStyle(SidebarListStyle())
                DetailView(text: "Make a selection")
            }
        }
    }
    

    【讨论】:

    • 这种方法是否允许侧边栏滚动?
    • 是的,侧边栏可以滚动,但是由于固定的宽度/高度,窗口无法调整大小;希望在下一个测试版中得到修复
    • 您的方法效果很好。希望 SwiftUI 的问题将在未来的 Xcode 版本中得到修复。此外,在示例中,NavigationView 可以替换为 HStackVStack。再次感谢您的帮助。
    猜你喜欢
    • 2020-08-08
    • 1970-01-01
    • 2016-01-28
    • 2020-04-09
    • 2023-01-16
    • 2011-07-03
    • 2020-08-02
    • 1970-01-01
    • 2022-06-17
    相关资源
    最近更新 更多