【问题标题】:SwiftUI implementing a custom NavigationViewStyleSwiftUI 实现自定义 NavigationViewStyle
【发布时间】:2020-10-01 19:21:36
【问题描述】:

我正在构建的应用程序包含多个需要在其间导航的视图。 NavigationView 很棒,但是我的应用程序针对的是 MacOS 11,并且没有单一的内容视图导航样式(我基本上想一次显示一个视图,仅此而已)。

我已经写了一个 custom view 来执行此操作,但它不能使用 NavigationLink 和所有其他助手(或者.. 可以吗?)

实现自定义NavigationViewStyle 应该可以,但我无法从协议中弄清楚。苹果的文档并没有真正的帮助。

这实际上显示了一个视图,但导航似乎不起作用或只是不触发视图更新。我错过了什么?

struct SingleContentNavigationViewStyle : NavigationViewStyle {
    func _body(configuration: _NavigationViewStyleConfiguration) -> _NavigationViewStyleConfiguration.Content {
        configuration.content
    }

    typealias _Body = _NavigationViewStyleConfiguration.Content
}

【问题讨论】:

    标签: swiftui


    【解决方案1】:

    Apple 概述了实现此目标的方法here

    我修改了他们的示例代码并首先使用它来生成两列外观:

    import SwiftUI
    
    struct ContentView: View {
        var body: some View {
            NavigationView {
                List {
                    NavigationLink("A", destination: Text("A"))
                    NavigationLink("B", destination: Text("B"))
                    NavigationLink("C", destination: Text("C"))
                }
                .navigationTitle("Letters")
                Text("Select a Letter")
            }
        }
    }
    

    在 macOS 模拟器上运行上述代码如下所示:

    通过添加.navigationViewStyle(StackNavigationViewStyle()),我可以使用相同的代码获得单列外观。

    import SwiftUI
    
    struct ContentView: View {
        var body: some View {
            NavigationView {
                List {
                    NavigationLink("A", destination: Text("A"))
                    NavigationLink("B", destination: Text("B"))
                    NavigationLink("C", destination: Text("C"))
                }
                .navigationTitle("Letters")
                Text("Select a Letter")
            }
            .navigationViewStyle(StackNavigationViewStyle())
        }
    }
    

    现在,.navigationViewStyle(StackNavigationViewStyle())

    导航按预期执行。

    希望这能解决您遇到的 macOS 特定问题。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 2021-03-28
    • 2019-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多