Панель навигации не отображается при переходе на другую вкладку во вкладке - PullRequest
0 голосов
/ 24 апреля 2020

В моем приложении, когда я перехожу на другую вкладку и прокручиваю вниз представление, оно обрезается, и панель навигации не сворачивается, как показано здесь:

enter image description here

Я пытался поставить .edgesIgnoringSafeArea(.top), но потом это происходит:

enter image description here

Когда я нажимаю кнопку домой симулятор и возвращаюсь к При нажатии на панель навигации происходит прокрутка, как и предполагалось. Это ошибка с Xcode? В настоящее время я использую XCode 11.4.1, тестирую на симуляторе iPhone 11 Pro Max, но точно такой же результат происходит на моем физическом iPhone 6s Plus.

РЕДАКТИРОВАТЬ: код для представления вкладки следующим образом:

import SwiftUI

struct MenuScreen: View {
    @State private var selection = 0
    var body: some View {

        TabView(selection: $selection){
            ItemsTab().tabItem{
                Image(systemName: "phone.fill")
                Text("Items")
            }.tag(0)
            TestTab().tabItem{
                Image(systemName: "phone.fill")
                Text("Test")
            }.tag(1)
        }
        .navigationBarTitle("Menu")
//        .edgesIgnoringSafeArea(.top)
        .navigationBarItems(trailing: NavigationLink(destination:ProfileScreen()){Text("Profile")})
//        .padding(.top,1)
            .navigationViewStyle(DefaultNavigationViewStyle())
//        .navigationBarHidden(true)
    }
}

struct MenuScreen_Previews: PreviewProvider {
    static var previews: some View {
        MenuScreen()
    }
}

Представление навигации заключено в экран Spla sh, например, так:

import SwiftUI

struct SplashScreen: View {
    @State private var isActive = false
    let content = ContentView()
    var body: some View {

        NavigationView{
            VStack{
                Text("Loading")
                LoopingAnimation()
                NavigationLink(destination: content,isActive: $isActive,label: {EmptyView()})
            }.onAppear(perform: {
                self.goToContentView(time:2.5)
                }).navigationBarTitle("My app")
        }
    }
    func goToContentView(time:Double){
        DispatchQueue.main.asyncAfter(deadline: .now() + Double(time)){
            self.isActive = true
        }
    }
}

struct SplashScreen_Previews: PreviewProvider {
    static var previews: some View {
        SplashScreen()
    }
}

РЕДАКТИРОВАТЬ 2: я попытался поместить представления навигации в представление вкладки, как показано здесь:

import SwiftUI

struct MenuScreen: View {
    var body: some View {
        TabView{
            NavigationView{
                ItemsTab().navigationBarTitle("Items")
            }.tabItem{
                    Image(systemName: "house.fill")
                    Text("Items")
            }
            NavigationView{
                TestTab().navigationBarTitle("Test")
            }.tabItem{
                Image(systemName: "phone.fill")
                Text("Test")
            }


        }
                        .navigationBarHidden(true)
            //            .navigationBarBackButtonHidden(true)
            .frame(alignment: .center)
//                    .edgesIgnoringSafeArea(.top)
            .navigationBarItems(trailing: NavigationLink(destination:ProfileScreen()){Text("Profile")})
            //        .padding(.top)
            .navigationViewStyle(DefaultNavigationViewStyle())



    }
}

struct MenuScreen_Previews: PreviewProvider {
    static var previews: some View {
        MenuScreen()
    }
}

Но в то время как это привело к сворачивающейся панели навигации, которая работала даже при переключении вкладок, результат выглядел так: enter image description here

1 Ответ

0 голосов
/ 01 мая 2020

Сделано так, чтобы панель навигации оставалась свернутой на экране вкладок, аналогично тому, что происходит при переходе к другим категориям на вкладке в магазине приложений путем установки .displayMode внутри .navigationBarTitle на .inline

Снимок экрана :

enter image description here

...