SwiftUI 导航到不同的视图然后返回导致主视图上下移动

时间:2021-01-06 21:24:43

标签: swift swiftui swiftui-navigationlink swiftui-navigationview

可能很难从图片中看出,但它在底部增加了一个更大的空白区域,并且它在导航栏下方稍微向上移动了整个视图(或者它可能正在缩小视图?)。我在应用中有通知横幅,它们在第一张图片中显示良好,但是当它像第二张图片一样显示时,通知位于导航栏下方且无法读取。

这是什么原因造成的?我该如何解决?

如果需要更多代码或屏幕截图,请告诉我,并感谢您的时间。

这是我的主视图代码,包含 NavigationView:

struct ContentView: View {
let settings: Settings

var body: some View {
    NavigationView {
        VStack {
            CarouselView(views: [
                PageView(pageModel: PageViewModel(page: "DISPOSE", settings: settings)),
                PageView(pageModel: PageViewModel(page: "MOVE TO ME", settings: settings)),
                PageView(pageModel: PageViewModel(page: "MOVE TO LOCATION", settings: settings))
            ])
        }
        .navigationBarItems(
            leading: NavigationLink(destination: SettingsView(settings: settings)){
                Image(systemName: "gear")
                    .resizable()
                    .frame(width: 35, height: 35)
            },
            trailing: NavigationLink(destination: HelpView()){
                Image(systemName: "questionmark.circle")
                    .resizable()
                    .frame(width: 35, height: 35)
            }
        )
        .navigationBarTitle(Text(""), displayMode: .inline)
    }
    .navigationViewStyle(StackNavigationViewStyle())
}

这是 CarouselView 的一个片段,这是设置主视图框架的地方:

import SwiftUI

struct CarouselView: View {

@GestureState private var dragState = DragState.inactive
@State var carouselLocation = 0
let screenWidth = UIScreen.main.bounds.size.width
let screenHeight = UIScreen.main.bounds.size.height

var views:[PageView]


private func onDragEnded(drag: DragGesture.Value) {
    let dragThreshold:CGFloat = 400
    if drag.predictedEndTranslation.width > dragThreshold || drag.translation.width > dragThreshold{
        carouselLocation =  carouselLocation - 1
    } else if (drag.predictedEndTranslation.width) < (-1 * dragThreshold) || (drag.translation.width) < (-1 * dragThreshold)
    {
        carouselLocation =  carouselLocation + 1
    }
}

var body: some View {
    ZStack{
        ForEach(0..<views.count){i in
            //Spacer()
            self.views[i].isActive(i == relativeLoc())
                .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
                .animation(.interpolatingSpring(stiffness: 300.0, damping: 30.0, initialVelocity: 10.0))
                .background(Color.white)
                .opacity(self.getOpacity(i))
                .animation(.interpolatingSpring(stiffness: 300.0, damping: 30.0, initialVelocity: 10.0))
                .offset(x: self.getOffset(i))
                .animation(.interpolatingSpring(stiffness: 300.0, damping: 30.0, initialVelocity: 10.0))
                .zIndex(self.getZIndex(i))
            //Spacer()
        }
        
    }

当转到 SettingsView 或 HelpView 然后导航回 ContentView 时,内容视图将交替显示,如下所示:

how I want it to look

还有这个:

how I don't want it to look

0 个答案:

没有答案