【问题标题】:SwiftUI: How to make a hidden UITabBar display correctly on View appearing?SwiftUI:如何在 View 出现时正确显示隐藏的 UITabBar?
【发布时间】:2020-07-13 22:17:31
【问题描述】:

我有一个 TabView,其中一个选项卡是 NavigationView。我希望标签栏隐藏在导航目标视图中。我已经实现了这一点,但视图仅在第一次旋转后正确显示。如何让它第一次正确显示(第二张图片)?

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")
    }
}

这是第一次单击列表中的链接后屏幕的样子(不正确,如果标签栏未隐藏,底部会出现空白):

这是将屏幕旋转为横向,然后再转回纵向后的样子(正确,蓝色视图一直延伸到底部):

有没有办法强制重绘,或模拟旋转和返回?我尝试了各种@State、@EnvironmentObect 和@ObservedObject 解决方案,但都没有。

【问题讨论】:

    标签: ios swift xcode uikit swiftui


    【解决方案1】:

    添加忽略底部安全区域可提供您想要的行为。

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

    使用 Xcode 11.4 / iOS 13.4 测试。

    【讨论】:

    • 是的!就是这个!很简单。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 2011-04-20
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    相关资源
    最近更新 更多