【问题标题】:SwiftUI NavigationView displaying incorrectlySwiftUI NavigationView 显示不正确
【发布时间】:2020-10-19 02:25:04
【问题描述】:

我正在学习 SwiftUI 并按照 Apple 的“Landmark”教程进行操作,然后举出示例并尝试利用这些知识制作自己的示例。

但是,我真的缺少一些理解,因为我不明白为什么我会出现非标准行为。

苹果代码:

struct CategoryHome: View
{
    var body: some View
    {
        NavigationView
        {
            Text("Landmarks Content")
                .navigationBarTitle(Text("Featured"))
        }
    }
}

它会产生这个:

我的代码:

struct ContentView: View
{
    @State private var selection: String? = nil
    
    var body: some View
    {
        NavigationView
        {
            NavigationLink(destination: Text("Second View"), tag: "Second", selection: $selection) { EmptyView() }
            NavigationLink(destination: Text("Third View"),  tag: "Third",  selection: $selection) { EmptyView() }
            NavigationLink(destination: Text("Forth View"),  tag: "Forth",  selection: $selection) { EmptyView() }
        
            VStack
            {
                Text("Content View")
                Spacer()
                Button("Press to goto 2nd view", action: { self.selection = "Second" })
                Button("Press to goto 3rd view", action: { self.selection = "Third" })
                Button("Press to goto 4th view", action: { self.selection = "Forth" })
                Spacer()
            }
        }
        .navigationBarTitle("Home")
    }
}

它会产生这个:

这是在 iPhone 11 模拟器上。

谁能简单地解释一下,为什么它们如此不同以及为什么我没有得到我想要的结果(这是一个带有标题、3 个按钮的主“屏幕”,在 iPhone 上纵向显示时)。

【问题讨论】:

    标签: swift swiftui swiftui-navigationview


    【解决方案1】:

    NavigationView 期望在 一个 视图内(不是大量视图),因此以下是可能的解决方案(使用 Xcode 12 / iOS 14 测试):

    struct ContentView: View
    {
        @State private var selection: String? = nil
        
        var body: some View
        {
            NavigationView
            {
                VStack
                {
                    Text("Content View")
                    Spacer()
                    Button("Press to goto 2nd view", action: { self.selection = "Second" })
                    Button("Press to goto 3rd view", action: { self.selection = "Third" })
                    Button("Press to goto 4th view", action: { self.selection = "Forth" })
                    Spacer()
                }
                .background(Group {
                        NavigationLink(destination: Text("Second View"), tag: "Second", selection: $selection) { EmptyView() }
                        NavigationLink(destination: Text("Third View"),  tag: "Third",  selection: $selection) { EmptyView() }
                        NavigationLink(destination: Text("Forth View"),  tag: "Forth",  selection: $selection) { EmptyView() }
                })
                    .navigationBarTitle("Home")
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-01-06
      • 1970-01-01
      • 1970-01-01
      • 2020-11-06
      • 2020-12-05
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      相关资源
      最近更新 更多