隐藏SwiftUI中特定页面上的标签栏

时间:2019-11-26 02:20:20

标签: ios swiftui tabview

我在应用程序中使用相机。该应用程序允许您借助SwiftUI中的TabView导航到此摄像机视图。但是,问题是,当我在相机视图上时,我想隐藏TabView。到目前为止,我一直在尝试找到解决方案,但似乎找不到任何解决方案。

这里是screenshot of the code and the view with the tabview

注意:屏幕截图包含预览图像。当我在真实设备上运行相机时,它可以正常工作。问题是进入摄像机视图后,我需要隐藏标签栏。

这是我使用的代码示例:

import SwiftUI

struct AppView: View {
    var body: some View {
        TabView{
            Home()
                .tabItem {
                    // Add icon
                Text("Home")
            }

            MomentsCam()
                .tabItem {
                    // Add icon
                    Text("Camera")
            }.navigationBarHidden(true)

            Moments()
                .tabItem{
                    //Add icon
                     Text("Moments")
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

我根据您的情况使用TabView更新了my solution。相同的想法:您正在使用type Page = { edges: (Edge | null)[] | null } type Edge = { node: object | null } function isNotNull<T> (it: T): it is NonNullable<T> { return it != null } export function pageToEdges (page: Page | null) { if (page === null) return [] const { edges } = page if (edges === null) return [] return edges.filter(isNotNull).map(e => e.node).filter(isNotNull) } type CustomPage = { number: number, edges: CustomNode[] } type CustomNode = { foo: string } const page = { edges: [{ node: { foo: 'bar' } }] } const data = pageToEdges(page) function logData(input: CustomNode) { console.log(input) } logData(data) ZStack。想法是使用@State var selection.opacity中的TabView(在我的示例中就是YourCameraView):

Image(systemName: "plus.circle")

当您点击相机标签时,项目struct TabViewModel: View { @State var selection: Int = 0 var body: some View { ZStack { GeometryReader { geometry in TabView(selection: self.$selection) { Text("list") .tabItem { Image(systemName: "list.bullet.below.rectangle") }.tag(0) Text("plus") .tabItem { Image(systemName: "camera") }.tag(1) Text("more categories!") .tabItem { Image(systemName: "square.grid.2x2") }.tag(2) } .opacity(self.selection == 1 ? 0.01 : 1) Image(systemName: "plus.circle") .resizable() .frame(width: 60, height: 60) .shadow(color: .gray, radius: 2, x: 0, y: 5) .offset(x: geometry.size.width / 2 - 30, y: geometry.size.height - 80) .onTapGesture { self.selection = 0 } .opacity(self.selection == 1 ? 1 : 0) } } } } 变得不可见

答案 1 :(得分:1)

您可以根据需要尝试以下代码。

  struct MomentsCam: View {
                var body: some View {
                    Text("Cam")
                }
            }

            struct Moments: View {
                var body: some View {
                    Text("Moments Cam")
                }
            }
            struct AppView: View {

                @State var  showCamera = false
                var body: some View {

                      GeometryReader{ p in
                    ZStack{
                    TabView{
                        Home()
                            .tabItem {
                                // Add icon
                            Text("Home")
                        }

                        Text("holder")
                            .tabItem {
                                // Add icon
                                Text("Camera")
                        }.navigationBarHidden(true).onAppear{
                            self.showCamera = true
                            print(p.size)
                        }

                        Moments()
                            .tabItem{
                                //Add icon
                                 Text("Moments")
                        }
                    }
                        if self.showCamera{
                    MomentsCam().frame(width: p.size.width, height: p.size.height).background(Color.white)
                            }
                        }
                    }
                }
            }