ios 如何在不使用NavigationStack/Link的情况下导航视图?[副本]

5n0oy7gb  于 12个月前  发布在  iOS
关注(0)|答案(1)|浏览(92)

这个问题已经有答案了

Swift UI Lifecycle: how to replace the current view with a new one ? Not simply pushing it(1个答案)
3天前关闭。
我想在我的应用程序中更改视图,但我发现的唯一方法是使用NavigationStack和NavigationLink。
我有两个问题:
1.幻灯片动画
1.后退按钮
我希望用户能够点击一个按钮,并采取从一个视图到另一个。没有动画,角落里没有后退按钮。
这似乎是一个简单的任务,但我已经搜索了几个小时,找不到任何东西。
我处理这个问题的方法错了吗?我是否应该在一个视图中构建所有内容,并根据需要隐藏/显示元素?我想知道我是否不应该为每个新的“屏幕”构建单独的视图。

6tdlim6h

6tdlim6h1#

Should I build everything in one view and hide/show elements as they're needed?这实际上取决于您的应用程序的复杂性。对于一个小应用程序来说,将所有内容都构建到一个视图中可能是合适的,但是当有复杂的交换和导航时,它可能不是一个好的选择。

然而它可以做到,请参阅示例代码来回答您的问题How navigate views without using NavigationStack/Link?

I'm wondering if I'm not supposed to build separate views for each new screen.是的,这是一个好主意,它更加模块化,并且在一个视图中可以放入多少内容方面存在限制。

struct OverView: View {
    @State private var viewSelect = "Main"
    
    var body: some View {
        HStack {
            Picker("Select", selection: $viewSelect) {
                ForEach(["Fight", "Skills", "Inventory", "Shop", "Main"], id: \.self) {
                    Text($0)
                }
            }.pickerStyle(.segmented)
        }
        ZStack {
            switch viewSelect {
                case "Fight": Text("Fight view")  // <--- simulated FightView
                case "Skills": Text("Skills view")
                case "Inventory": Text("Inventory view")
                case "Shop": Text("Shop view")
                default: Text("Main view")
            }
        }
        Spacer()
    }
}

相关问题