繁体   English   中英

如何在 SwiftUI 中全屏显示视图?

[英]How to present a view full-screen in SwiftUI?

我工作到登录view ,现在我想在登录后显示该view ,但我不希望用户有可能返回到登录view UIkit我使用了present() ,但似乎在SwiftUI presentation(_ modal: Modal?)view并没有占据整个屏幕。 Navigation也不是一种选择。

谢谢!

我不希望用户有可能返回到登录视图

在这种情况下,您不应该离开登录视图,而是完全替换它。

您可以通过有条件地构建登录视图或“应用程序视图”来做到这一点。

像这样的东西...

// create the full screen login view
struct LoginView: View {
    // ...
}

//create the full screen app veiw
struct AppView: View {
    // ...
}

// create the view that swaps between them
struct StartView: View {
    @EnvironmentObject var isLoggedIn: Bool // you might not want to use this specifically.

    var body: some View {
        isLoggedIn ? AppView() : LoginView()
    }
}

通过使用这样的模式,您不会呈现或导航离开登录视图,而是完全替换它,因此它根本不再位于视图层次结构中。

这可确保用户无法导航回登录屏幕。

同样......通过使用这样的@EnvironmentObject您可以稍后对其进行编辑(以退出),您的应用程序将自动返回到登录屏幕。

将 body 封装在一个 Group 中以消除编译器错误:

struct StartView: View {

@EnvironmentObject var userAuth: UserAuth

var body: some View {
    Group {
        if userAuth.isLoggedin {
            AppView()
        } else {
            LoginView()
        }

    }
}
struct ContentView: View {
    @EnvironmentObject var userAuth: UserAuth 
    var body: some View {
        if !userAuth.isLoggedin {
            return AnyView(LoginView())
        } else {
            return AnyView(HomeView())
        }
    }
}

我为自己做了这个扩展。 欢迎任何反馈/想法。 :)

https://github.com/klemenkosir/SwiftUI-FullModal

用法

struct ContentView: View {

    @State var isPresented: Bool = false

    var body: some View {
        NavigationView {
            Button(action: {
                self.isPresented.toggle()
            }) {
                Text("Present")
            }
            .navigationBarTitle("Some title")
        }
        .present($isPresented, view: ModalView(isPresented: $isPresented))
    }
}

struct ModalView: View {

    @Binding var isPresented: Bool

    var body: some View {
        Button(action: {
            self.isPresented.toggle()
        }) {
            Text("Dismiss")
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM