如何在SwiftUI中从登录视图转换到选项卡视图
我有一个谷歌登录屏幕,然后它应该过渡到TabView。我尝试使用ZStack,但它会导致应用程序在加载每个选项卡之前出现故障。它将显示登录按钮一秒钟,然后将显示正确的选项卡 有没有一种方法可以完全与ViewController类似?或者,在调用新视图(MainView)之前,是否有办法完全删除登录按钮 MainView只是一个带有tabView和tabItems的SwiftUI视图 我有一个快速的界面:如何在SwiftUI中从登录视图转换到选项卡视图,swift,xcode,transition,swiftui,swift5,Swift,Xcode,Transition,Swiftui,Swift5,我有一个谷歌登录屏幕,然后它应该过渡到TabView。我尝试使用ZStack,但它会导致应用程序在加载每个选项卡之前出现故障。它将显示登录按钮一秒钟,然后将显示正确的选项卡 有没有一种方法可以完全与ViewController类似?或者,在调用新视图(MainView)之前,是否有办法完全删除登录按钮 MainView只是一个带有tabView和tabItems的SwiftUI视图 我有一个快速的界面: import SwiftUI import GoogleSignIn struct Sig
import SwiftUI
import GoogleSignIn
struct SignInView: View {
@State var loggedIn = false
let logo = Image('googleLogo')
var body: some View {
ZStack {
Button(action: {
self.signIn {
self.loggedIn = true
}
}, label: {
VStack {
logo
.padding(EdgeInsets(top: 8, leading: 16, bottom: 8, trailing: 16))
.background(Color.white)
.cornerRadius(8.0)
.shadow(radius: 4.0)
Text("Sign-In")
.foregroundColor(.primary)
.multilineTextAlignment(.center)
.padding(5)
}
}).zIndex(-1)
if loggedIn {
MainView()
}
}
}
func signIn(completion: @escaping () -> Void) {
GIDSignIn.sharedInstance()?.presentingViewController = UIApplication.shared.windows.last?.rootViewController
GIDSignIn.sharedInstance()?.signIn()
DispatchQueue(label: "SignIn Check", qos: DispatchQoS.background).async(execute: { () -> Void in
while true {
if GIDSignIn.sharedInstance()?.currentUser != nil {
completion()
break
}
}
})
}
}
struct SignInView_Previews: PreviewProvider {
static var previews: some View {
SignInView()
}
}
您可以保持
ZStack
的原样,并使登录按钮也成为条件的一部分,以修复您看到的故障,但更干净的解决方案是使用组,而不是带有登录条件的ZStack
:
var主体:一些视图{
团体{
如果!洛格丁{
按钮(操作:{
自我签名{
self.loggedIn=true
}
},标签:{
VStack{
标志
.填充(边集(顶部:8,前导:16,底部:8,尾随:16))
.背景(颜色.白色)
.转弯半径(8.0)
.阴影(半径:4.0)
文本(“登录”)
.foregroundColor(.primary)
.multilitextalignment(.center)
.填充(5)
}
})
}否则{
MainView()
}
}
}
这对我有帮助!谢谢你!