SwiftUI: Как правильно отобразить скрытый UITabBar при появлении View? - PullRequest
1 голос
/ 02 апреля 2020

У меня есть TabView, а одна из вкладок является NavigationView. Я хочу, чтобы панель вкладок была скрыта в представлении назначения навигации. Я добился этого, но вид отображается правильно только после первого поворота. Как заставить его правильно отображаться в первый раз (2-е изображение)?

struct ContentView: View {
    var rowIndexes : [Int] = [0,1,2,3,4,5,6]
    var body: some View {
        TabView {

            NavigationView {
                List {
                    ForEach(self.rowIndexes, id: \.self) {i in
                        NavigationLink(
                        destination: Color(.blue)
                            .onAppear(perform: {
                                Global.tabBar!.isHidden = true
                            })
                            .onDisappear(perform: {
                                Global.tabBar!.isHidden = false
                            })
                        ) {
                            Text("\(i)")
                        }
                    }
                }
            }.tabItem {
                    Image(systemName: "list.number")
                    Text("List View")
            }

            NavigationView {
                Text("Options View")
            }.tabItem {
                    Image(systemName: "wrench")
                    Text("Options")
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
struct Global {
    static var tabBar : UITabBar?
}
extension UITabBar {
    override open func didMoveToSuperview() {
        super.didMoveToSuperview()
        Global.tabBar = self
        print("Tab Bar moved to superview")
    }
}

Вот как выглядит экран после первого нажатия на ссылку в списке (НЕПРАВИЛЬНО, с пробелом в внизу, где была бы панель вкладок, если бы она не была скрыта):

enter image description here

Вот как выглядит экран после поворота в горизонтальное положение, затем назад в портрет (ПРАВИЛЬНО, синий вид, простирающийся до самого дна):

enter image description here

Есть ли способ вызвать перерисовку или смоделировать вращение и назад? Я пробовал различные решения @State, @EnvironmentObect и @ObservedObject, но ни одно из них не работает.

1 Ответ

1 голос
/ 02 апреля 2020

Добавление игнорирования нижней безопасной области дает поведение, как вы хотите.

NavigationLink(
    destination: Color(.blue).edgesIgnoringSafeArea(.bottom)  // << here !!
    .onAppear(perform: {
        MyGlobal.tabBar!.isHidden = true

Протестировано с Xcode 11.4 / iOS 13.4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...