如何使用 SwiftUI 显示全栈模式?

Posted

技术标签:

【中文标题】如何使用 SwiftUI 显示全栈模式?【英文标题】:How to display a fullstack modal with SwiftUI? 【发布时间】:2020-05-14 21:22:20 【问题描述】:

我有一个导航栏,底部有一个标签栏,用于我的应用程序中的大部分导航。单击按钮时,我正在尝试显示全屏视图,从而有效地删除所有导航。

当没有导航栏或标签栏时,关于 SO 的其他问题解决了这种情况,因此它们并没有真正回答我的用例。

这是我尝试过的:

点击时隐藏导航栏和标签栏:不适用于标签栏。如果我在关闭全屏视图时尝试返回另一个视图,顶部导航会出现问题。

使用模式:它可以工作,但不是全屏,这不适合我想要做的事情。

在我用按钮切换的所有内容之上使用 ZStack:这不会隐藏标签栏。

有没有解决办法,还是我应该放弃并使用模态?

谢谢

【问题讨论】:

【参考方案1】:

这是一个可能解决方案的演示。

struct DemoModalOverTabView: View 
    @State private var showModally = false
    var body: some View 
        ZStack 
            TabView      //  << main tab view
                DemoTab
            .disabled(showModally) // << deactivate forcefully

            if showModally 
                DemoModal     //  << modal view
                   .zIndex(1)     // << required !!
                   .transition(.move(edge: .bottom)).animation(.default)
            
        
    

    var DemoTab: some View 
        Button("Show")  self.showModally = true 
            .tabItem  Image(systemName: "person") 
    

    var DemoModal: some View 
        Button("Hide")  self.showModally = false 
           .frame(maxWidth: .infinity, maxHeight: .infinity)
           .background(Color.yellow)
           .edgesIgnoringSafeArea(.all)
    

【讨论】:

非常感谢!我没想到在包含选项卡的视图中设置 ZStack

以上是关于如何使用 SwiftUI 显示全栈模式?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SwiftUI 将手机锁定为纵向模式?

SwiftUI 2.0如何更改表单部分的背景颜色[重复]

如何使用 SwiftUI 将应用程序采用到 iOS 13 暗模式?

SwiftUI - 如何在编辑模式下避免列表中的行缩进,但不使用 onDelete? (附代码/视频)

如何与代码并排打开 SwiftUI 预览? [复制]

SwiftUI,列表行添加按钮