gpt4 book ai didi

单个 View 的 macOS SwiftUI 导航

转载 作者:行者123 更新时间:2023-12-03 14:20:38 24 4
gpt4 key购买 nike

我正在尝试为我的 macOS SwiftUI 状态栏应用程序创建一个设置 View 。到目前为止,我的实现一直使用 NavigationView , 和 NavigationLink ,但是这个解决方案会产生一个半 View ,因为设置 View 将父 View 推到一边。下面的屏幕截图和代码示例。
导航边栏
enter image description here

struct ContentView: View {
var body: some View {
VStack{
NavigationView{
NavigationLink(destination: SecondView()){
Text("Go to next view")
}}
}.frame(width: 800, height: 600, alignment: .center)}
}

struct SecondView: View {
var body: some View {
VStack{

Text("This is the second view")

}.frame(width: 800, height: 600, alignment: .center)
}
}
我能找到的少量信息表明,在 macOS 上使用 SwiftUI 是不可避免的,因为“全屏” NavigationView在 iOS 上 ( StackNavigationViewStyle ) 在 macOS 上不可用。
在 SwiftUI for macOS 中,是否有一种简单甚至复杂的方法来实现到设置 View 的转换,该 View 占据整个框架?如果没有,是否可以使用 AppKit调用一个用SwiftUI 编写的View 对象?
也是一个 Swift 新手 - 请保持温柔。

最佳答案

这是自定义导航类解决方案的可能方法的简单演示。使用 Xcode 11.4/macOS 10.15.4 测试

demo

注意:背景颜色用于更好的可见性。

struct ContentView: View {
@State private var show = false
var body: some View {
VStack{
if !show {
RootView(show: $show)
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(Color.blue)
.transition(AnyTransition.move(edge: .leading)).animation(.default)
}
if show {
NextView(show: $show)
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(Color.green)
.transition(AnyTransition.move(edge: .trailing)).animation(.default)
}
}
}
}

struct RootView: View {
@Binding var show: Bool
var body: some View {
VStack{
Button("Next") { self.show = true }
Text("This is the first view")
}
}
}

struct NextView: View {
@Binding var show: Bool
var body: some View {
VStack{
Button("Back") { self.show = false }
Text("This is the second view")
}
}
}

关于单个 View 的 macOS SwiftUI 导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61424225/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com