SwiftUI-如果TabView嵌套在NavigationLink中,则TabView内部的视图将在一秒钟后跳转

时间:2020-07-02 07:43:52

标签: ios swift xcode swiftui

我的设置

入口点(ContentView):

struct ContentView: View {
    var body: some View {
        NavigationView {
            FirstView()
                .navigationBarTitle("", displayMode: .inline)
                .navigationBarHidden(true)
        }
    }
}

FirstView:

struct FirstView : View {
    var body : some View {
        NavigationLink(destination:
            SecondView()
                .navigationBarTitle("")
                .navigationBarHidden(true)) {
                    Text("Fourth View")
        }
    }
}

SecondView:

struct SecondView : View {
    var body : some View {
        TabView {
            FirstTabView()
                .tabItem {
                    Image(systemName: "play.circle.fill")
                    Text("First Tab")
            }
            .navigationBarTitle("First Tab")
            .navigationBarHidden(true)
            
            SecondTabView()
                .tabItem {
                    Image(systemName: "bell.fill")
                    Text("Second Tab")
            }
            .navigationBarTitle("Second Tab")
            .navigationBarHidden(true)
        }
    }
}

FirstTabView

struct FirstTabView : View {
    var body : some View {
        VStack {
            HStack(spacing: 10) {
                Spacer()
                Text("FIRST")
                Spacer()
                Text("SECOND")
                Spacer()
            }
            .padding(.all)
            
            Spacer()
        }
        .border(Color.red, width: 5)
    }
}

SecondTabView与第一个非常相似,因此我将不包含它。

问题

我现在遇到的问题是,TabViews的内容在忽略安全区域的情况下跳了起来(有关说明,请参阅随附的屏幕截图)。实际上,该视图在短时间内会按预期般完美地显示,然后立即跳转,破坏所有内容。

我发现只有在像我现在那样通过NavigationLink加载TabView时才会发生这种情况。如果我在ContentView上的NavigationView中直接加载SecondView()(换句话说,它是我加载的第一个视图),那么问题就消失了,一切都会按预期进行。

很抱歉,我无法包含问题的GIF-视图以预期的结果启动,然后在几秒钟后跃升并变为您在实际结果中看到的样子。

预期结果

expected result

实际结果

actual result

注意:在带有缺口的iPhone上,我的文字甚至不可见。另外,为了使我的观点更清楚,我也加了粗边框。

编辑

我刚刚发现锁定设备然后解锁可以使屏幕恢复正常。

0 个答案:

没有答案