【问题标题】:SwiftUI: TabView and NavigationView play nicely on iPhone but not on iPad?SwiftUI:TabView 和 NavigationView 在 iPhone 上玩得很好,但在 iPad 上不行?
【发布时间】:2021-09-15 10:13:41
【问题描述】:

我的应用有一个显示选项列表的主屏幕和几个完全不同的页面。每个都指向一个带有标签的调度程序视图,该标签指示要显示哪个页面。我还希望能够在页面之间滑动。所以我有这段代码(当然,从实际应用程序中大大简化,但行为方式相同):

struct Tab: Hashable {
    let name: String
    let id: Int
}


struct ContentView: View {
    
    let tabs: [Tab] = [Tab(name: "first", id: 1), Tab(name: "second", id: 2), Tab(name: "third", id: 3)]
    
    var body: some View {
        NavigationView {
            Form {
                List (tabs, id: \.self) { tab in
                    NavigationLink(destination: Dispatcher(which: tab.id)) {
                        VStack (alignment: .leading) {
                            Text(tab.name).font(.headline).bold()
                        }
                    }
                }
            }.navigationTitle("test")
            Text("hello")
        }
    }
}

struct Dispatcher: View {
    var which: Int
    @State private var tab = 2
    
    var body: some View {
        TabView(selection: $tab) {
            Text("first page").tag(1)
            Text("second page").tag(2)
            Text("third page").tag(3)
        }
        .tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
        .onAppear(perform: { tab = which })

    }
}

在 iPhone 上,它运行良好。但是在 iPad 上,无论在哪个方向,点击主页中的任何选项都会将我带到相同的子页面,该子页面由 @State 变量选项卡的初始值设置。 .onAppear 中的赋值正在执行,但 tab 的新值被忽略。

感谢您的任何想法。

杰里米

【问题讨论】:

    标签: ios iphone ipad swiftui


    【解决方案1】:

    现在工作狗已经回答了我的问题,我可以扩展它吗?

    我在 iPad 上实施他(当然是她)的解决方案。我单击 NavigationView 列表中的选择(例如,“第二个”)。单击的行突出显示并出现第二页。

    然后我滑动以显示另一个页面(例如“第三个”)。没关系。

    但是“second”在 NavigationView 列表中仍然突出显示,所以我无法单击它返回到第二页。

    我可以告诉 NavigationView 列表突出显示与实际显示的页面对应的条目吗?还是什么都不强调?

    【讨论】:

      【解决方案2】:

      为什么不这样做:

      struct Dispatcher: View {
          @State var which: Int
          
          var body: some View {
              TabView(selection: $which) {
                  Text("first page").tag(1)
                  Text("second page").tag(2)
                  Text("third page").tag(3)
              }
              .tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
          }
      }
      

      【讨论】:

      • 我几天前为了感谢这个答案而发表的轻松自嘲的赞赏评论已经消失。我是新来的:有什么原因吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-10
      • 1970-01-01
      • 1970-01-01
      • 2015-03-17
      相关资源
      最近更新 更多