【问题标题】:Page View + Hidden Navigation Bar doesn't work页面视图 + 隐藏导航栏不起作用
【发布时间】:2021-08-04 16:23:37
【问题描述】:

当我在带有隐藏导航栏标题的导航视图中包含一个作为written by Apple 的页面视图时,滑动页面会显示标题。

struct ContentView: View {
  var body: some View {
    NavigationView {
      PageView(pages: [Text("Foo"), Text("Bar")])
      .navigationBarTitle("Title")
      .navigationBarHidden(true)
    }
  }
}

我尝试添加一个状态变量,使用按钮将navigationBarHidden Bool 设置为true,但无济于事。当页面视图翻转页面时,navigationBarHidden 属性和 UI 之间的连接似乎中断了。

我可以通过在if navigationBarHiddenelse 块中同时放入.onAppear { isNavigationBarHidden = true } 块并在else 块中触发.onAppear { isNavigationBarHidden = true } 来强制重绘带有导航标题的视图,但那很臭。

【问题讨论】:

    标签: swift swiftui swiftui-navigationview


    【解决方案1】:

    我找到了一个将页面视图包含在列表中的 hacky 解决方案(这是 Apple 在其 example app 中所做的,这就是我找到它的方式)。

    struct ContentView: View {
      var body: some View {
        NavigationView {
          List {
            PageView(pages: [Text("Foo"), Text("Bar")])
          }
          .navigationBarTitle("Title")
          .navigationBarHidden(true)
        }
      }
    }
    

    我尝试在 VStack、AnyView、它自己的自定义 View 对象中包含页面视图,但这些都不起作用。我猜它之所以有效,是因为 List 本质上是动态的,所以它会触发全视图重绘?但在我看来,它仍然像 Apple 的错误。

    我仍然需要对 UI 进行大量修改,因为我实际上并不想要 List,但这是我能找到的最好的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-20
      • 1970-01-01
      • 2015-11-14
      • 2012-07-07
      • 2011-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多