SwiftUI 实现自定义 NavigationViewStyle

标签 swiftui

我正在构建的应用程序由多个 View 组成,我需要在它们之间导航。 NavigationView很棒,但是我的应用程序针对 MacOS 11,并且没有单一的内容 View 导航样式(我基本上只想一次显示一个 View ,仅此而已)。
我写了一个 custom view这样做,但它不能利用 NavigationLink和所有其他 helper (或者..可以吗?)
实现自定义 NavigationViewStyle应该有效,但我无法从协议(protocol)中弄清楚。 Apples 文档并没有真正的帮助。
这实际上显示了一个 View ,但导航似乎不起作用或只是不触发 View 更新。我错过了什么?

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

    typealias _Body = _NavigationViewStyleConfiguration.Content
}

最佳答案

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 模拟器上运行上面看起来像这样:
enter image description here
通过添加 .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()) :
enter image description here
导航按我的预期执行。
希望这可以解决您遇到的 macOS 特定问题。

关于SwiftUI 实现自定义 NavigationViewStyle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64161948/

相关文章:

ios - 无法将类型 [Type] 的值转换为预期的参数类型 'some View'

function - 有没有办法为 NavigationLink 添加额外的功能? swift 用户界面

macos - 使用自定义类型标识符拖放不起作用

swift - 如何在 SwiftUI 中将阴影应用于内部 View ?

xcode - SwiftUI如何在View在初始化程序中需要@Binding时实例化PreviewProvider

SwiftUI ContextMenu 导航到另一个 View

ios - SwiftUI 动画影响其他 View

ios - 在 View 中初始化 @ObservedObject 时发生内存泄漏

ios - SwiftUI - TextField 如何根据其内容动态增加其高度?

ios - SwiftUI:如何让项目的拖放重新排序工作?