ios SwiftUI:如何在macOS中使用NavigationView?

enyaitl3  于 2023-05-02  发布在  iOS
关注(0)|答案(3)|浏览(239)

我有两个独立的Xcode项目,我正在使用它们来学习SwiftUI:
1.一个真正的macOS项目(不是Catalyst)在Mac上。

  1. iOS项目(iPhone)。
    下面的代码创建了一个简单的NavigationView和master-detail视图:
import SwiftUI

struct ListView : View {
    var body: some View {
        NavigationView {
            List() {
                NavigationButton(destination: Text("detail 1")) {
                    Text("row 1")
                }
                NavigationButton(destination: Text("detail 2")) {
                    Text("row 2")
                }
            }
        }
    }
}

#if DEBUG
struct ListView_Previews : PreviewProvider {
    static var previews: some View {
        ListView()
    }
}
#endif

它在iOS上按预期工作👍
但是在macOS项目上,与上面相同的代码的工作方式不同🤯
当我在Mac上启动应用程序时,我会看到这个窗口

而且当我点击任何一行时,详细视图就会折叠/消失,从不向我显示详细视图。

有办法解决吗?也许我漏掉了什么或者这只是一个bug?

pepwfjgg

pepwfjgg1#

下面是我的代码,似乎使用Xcode 12修复了它。2 beta 3:

import SwiftUI

var listItems = ["Item 1", "Item 2", "Item 3", "Item 4"]
var secondItems = ["Second 1", "Second 2", "Second 3", "Second 4"]

struct ContentView: View
{
    
    @State var select: String? = "Item 1"
    var body: some View
    {
        VStack
        {
            NavigationView
            {
                List
                {
                    ForEach((0..<listItems.count), id: \.self)
                    {index in
                        NavigationLink(destination: SecondView(), tag: listItems[index], selection: $select)
                        {
                            Text(listItems[index])
                                .padding(.vertical, 2.0)
                        }
                    }
                    Spacer()
                    
                }.frame(width:160)
                                .listStyle(SidebarListStyle())
            }
            
            .toolbar
            {
                Text("this is not the title")
                Button(action: {})
                {
                    Label("Upload", systemImage: "square.and.arrow.up")
                }
            }
            .navigationTitle("My Title")
            .navigationViewStyle(DoubleColumnNavigationViewStyle())
        }
    }
}

struct SecondView: View {

    var body: some View {
        NavigationView {
            List
            {
                ForEach((0..<secondItems.count), id: \.self)
                {index in
                    NavigationLink(destination: Text(secondItems[index]))
                    {
                        Text(secondItems[index])
                            .frame(height: 20)
                    }
                }
            }.frame(width:150)
        }
    }
}

这使得一个窗口像这样:

vxbzzdmp

vxbzzdmp2#

我没有答案,但我正在尝试做同样的事情,并有一些观察补充,也许他们会有所帮助:
添加目标视图:

NavigationButton(destination: DetailView()) {
            Text("Show Detail")
        }

在NavigationView上设置宽度可阻止右侧视图消失。
此外,添加

.onAppear { print("DetailView called") }

显示,即使它没有被显示,当按钮被点击时,视图实际上被调用。
编辑:它在那里!视图被分隔线隐藏,请将其向左拖动以查看详细视图。
编辑2:Xcode beta 2给出了“'NavigationView'在macOS中不可用”的消息。

0sgqnhkj

0sgqnhkj3#

NavigationSplitView
在两列或三列中显示视图的视图,其中前导列中的选择控制后续列中的显示。

相关问题