我尝试使用NavigationLink进行导航和/或全屏显示,但它会根据条件而有所不同。当我尝试这样做时,我收到Type '() -> ()' cannot conform to 'View'
编译错误。有什么方法可以实现这一点吗?
注:我尝试隐藏ErrorView
的NavigationBar
,这样我就可以只看到内容。因为我是从HostingViewController中执行此操作的,所以我也可以看到ErrorView
的HostingViewController
导航栏。这就是我尝试.fullScreenCover
方法的原因。
import SwiftUI
struct LoginView: View {
@State private var isSelected: Bool = false
@State private var isSuccess: Bool = false
var nextButton: some View {
HStack {
NavigationLink("Test") {
if isSuccess {
HomeView(user: user)
} else {
isSelected.toggle()
}
}
.fullScreenCover(isPresented: $isSelected) {
ErrorView()
}
.buttonStyle(PlainButtonStyle())
.font(.system(size: 24))
}
}
var body: some View {
NavigationStack {
nextButton
}
}
}
2条答案
按热度按时间0tdrvxhp1#
这将删 debugging 误消息。
acruukt92#
问题是
isSelected.toggle()
不是一个视图,因此不能在destination参数中使用,你不应该在视图构建函数中执行变量变异的代码。另外,当你点击一个NavigationLink时,它的目的地将会显示出来。因为旧的
isActive
NavigationLink已经过时了,我不认为你可以阻止目的地的显示。也许可以通过推送一个nil值,但我还没有尝试过。所以我提出的解决方案使用按钮而不是NavigationLink。如果
isSuccess
,它可以导航到您想要的视图,否则它会弹出错误全屏封面。但是在NavigationStack中使用路径可能会变得非常复杂。