【问题标题】:Hide TabBar when a new view is pushed in SwiftUI在 SwiftUI 中推送新视图时隐藏 TabBar
【发布时间】:2019-11-24 16:57:27
【问题描述】:

如何在通过 NavigationLink 推送新视图时隐藏 TabBar?

这是我如何推送下一个视图:

TabView {
    NavigationView {
        List(fakeUser) { user in
            NavigationLink(destination: ChatDetailView(user: user)) {
                ChatCell(user: user)
            }
        }
        .navigationBarTitle("Chats")
        .navigationBarItems(leading: leadingBarItem, trailing: trailingBarItem)
    }
    .tabItem {
        Image(systemName: "message.fill")
            .font(.system(size: 20))
        Text("Chats")
    }
}

【问题讨论】:

  • 好吧,我已经设法构建了一个视图层次结构,它提供了您所要求的行为,但是在返回到根时 SwfitUI 会抛出异常'NSInternalInconsistencyException', reason: 'Tried to pop to a view controller that doesn't exist.',这完全是 SwiftUI 视图构造方法的废话。因此,由于这个原因,我不能将其作为答案,但理论上它是可能的,当 SwiftUI 变得更加稳定时。
  • 贴出来让大家知道

标签: ios swiftui


【解决方案1】:

注意:Xcode 11.2/iOS 13.2 出现异常

据我了解,这是一个重新布局,可提供您所要求的效果。

然而,虽然下面的代码中没有任何犯罪行为,但在导航返回时 UIKit 的内部却出现了异常:

 2019-11-24 10:54:36.644037+0200 测试[1180:41920] *** 终止
应用程序由于未捕获的异常“NSInternalInconsistencyException”,
原因:“试图弹出一个不存在的视图控制器。”

*** 第一次抛出调用堆栈:( 0 CoreFoundation 0x00007fff23c4f02e __exceptionPreprocess + 350 1 libobjc.A.dylib
0x00007fff50b97b20 ob​​jc_exception_throw + 48 2 核心基础
0x00007fff23c4eda8 +[NSException raise:format:arguments:] + 88 3
基础 0x00007fff256c9b61
-[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 191 4
UIKitCore 0x00007fff4713d9d1
__57-[UINavigationController popToViewController:transition:]_block_invoke + 620 

方法代码

var body: some View {
    NavigationView {
        TabView {
            List(fakeUser) { user in
                NavigationLink(destination: ChatDetailView(user: user)) {
                    ChatCell(user: user)
                }
            }
            .navigationBarTitle("Chats")
            .navigationBarItems(leading: leadingBarItem, trailing: trailingBarItem)
            .tabItem {
                Image(systemName: "message.fill")
                    .font(.system(size: 20))
                Text("Chats")
            }
        }
        .navigationBarTitle("Chats")
    }
}

【讨论】:

  • 它正在工作,但 navigationView 将应用于所有 TabView。我不想要那种行为
  • 正如你所说,当我关闭详细视图时应用程序崩溃
猜你喜欢
  • 2019-10-27
  • 2012-01-31
  • 2020-02-15
  • 2017-01-28
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
  • 2011-11-07
  • 1970-01-01
相关资源
最近更新 更多