您好,我是 swiftUI 的新手。我正在使用导航视图通过导航链接在我的视图之间创建导航,但我发现了一个问题,我不知道这是我的代码中的错误或错误 第一张图片是我的视图在我的子视图文件中看起来像这样,第二张当我在导航中使用它时它会像这样自动移动
这是我在父母视图上的代码
struct OnboardingSet: View {
private var offset : CGFloat = screenFrame.Width
@State private var currentPage : Int = 0
@State private var NavigationTag : Int? = nil
var body: some View {
NavigationView {
NavigationLink(
destination: SigninView(),
tag: 1,
selection: $NavigationTag,
label: {
HStack {
OnboardingView(ImageName: Resource.Image.onboarding1, Title: "First, Truth, \nPopular Topic", ButtonTitle: "Skip", TotalPage: 3, CurrentPage: 1) {
NavigationTag = 1
}
OnboardingView(ImageName: Resource.Image.onboarding2, Title: "Fast, Secure, \nMost Loved By User", ButtonTitle: "Skip", TotalPage: 3, CurrentPage: 2) {
NavigationTag = 1
}
OnboardingView(ImageName: Resource.Image.onboarding3, Title: "Feel the \n happiness", ButtonTitle: "sign in", TotalPage: 3, CurrentPage: 3) {
NavigationTag = 1
}
}
.offset(x: currentPage == 0 ? offset : 0, y: 0)
.offset(x: currentPage == 2 ? -offset : 0, y: 0)
.animation(.easeInOut)
.gesture(
DragGesture(minimumDistance: 5, coordinateSpace: .local)
.onEnded({ (value) in
if value.translation.width < 0 {
if currentPage != 2 {
currentPage += 1
}
}
if value.translation.width > 0 {
if currentPage != 0 {
currentPage -= 1
}
}
})
)
})
}
}
}
这是我的子视图
struct SigninView: View {
@ObservedObject private var viewModal = SignInViewModal()
var body: some View {
ZStack {
Image(Resource.Image.backgroundSignIn)
.resizable()
.aspectRatio(contentMode: .fill)
.blur(radius: 4)
.offset(x: 200, y: 10.0)
VStack {
HStack {
Text("Hello Unwary \n Reader")
.foregroundColor(.white)
.font(.system(size: 42))
.fontWeight(.black)
.padding(.top,64)
.padding(.leading)
.shadow(color: .black, radius: 16, x: 16, y: 16)
Spacer()
}
Spacer()
VStack {
BlurTextFeild("Email", Text: $viewModal.Email, TextEntryType: .Open)
.frame(width: screenFrame.Width - 30, height: 100)
BlurTextFeild("Password", Text: $viewModal.Password,TextEntryType: .Secure)
.frame(width: screenFrame.Width - 30, height: 100)
}.padding()
Button(action: {
viewModal.AuthState = viewModal.AuthState == SignInViewModal.authState.signIn ? SignInViewModal.authState.signUp : SignInViewModal.authState.signIn
}, label: {
Text(viewModal.AuthState == SignInViewModal.authState.signIn ? "Create Account" : "LogIn")
.foregroundColor(.black)
.opacity(0.5)
.font(.system(size: 18, weight: .bold, design: .rounded))
})
Spacer()
Button(action: {
}, label: {
ZStack {
Blur(effect: UIBlurEffect(style: .regular))
Color.black
.opacity(0.3)
Text(viewModal.AuthState == SignInViewModal.authState.signIn ? "Sign In" : "Sign Up")
.foregroundColor(.white)
.font(.system(size: 24))
}.frame(width: screenFrame.Width - 100, height: 80)
.cornerRadius(16)
}).padding(.bottom,32)
}.frame(width: screenFrame.Width, height: screenFrame.Height)
}
.edgesIgnoringSafeArea(.all)
.navigationBarBackButtonHidden(true)
.frame(width: screenFrame.Width, height: screenFrame.Height + 50, alignment: .center)
}
}
先谢谢你
答案 0 :(得分:1)
由于缺少许多依赖组件,所提供的代码不可测试,但我建议删除硬编码框架(因为它们使视图不灵活)并仅使用堆栈/对齐/填充进行重新布局。
}.frame(width: screenFrame.Width - 100, height: 80) // !!
.cornerRadius(16)
}).padding(.bottom,32)
}.frame(width: screenFrame.Width, height: screenFrame.Height) // !!
}
.edgesIgnoringSafeArea(.all)
.navigationBarBackButtonHidden(true)
.frame(width: screenFrame.Width, height: screenFrame.Height + 50, alignment: .center) // !!
答案 1 :(得分:0)
在某些情况下,您必须使视图的框架不是解决此问题的核心框架,但在我的情况下,问题是我添加了两次导航视图,所以我遇到了这个问题
我在二级视图中删除了导航视图,它完全解决了我的问题