弹出子导航时的透明选项卡栏查看IOS 15

人气:487 发布:2022-10-16 标签: ios swiftui swift ios15 uitabbarcontroller

问题描述

我有一个带有TabBar的SwiftUI应用程序。 如果我从NavigationView打开详细信息子视图,然后单击";Back";,选项卡栏将变为透明,并在选项卡栏图标下方显示源中的项目。

从主页提要中,打开子导航详细信息视图。-

然后进入详细视图后,单击"上一步"。-

您将看到此错误。选项卡栏将是透明的。-

推荐答案

iOS15中,苹果扩展了对UIKit滚动边缘外观的支持。 默认情况下,此设置会生成透明的选项卡栏背景。

若要解决此问题,请将下面的代码添加到SceneDelegate文件中,以定义选项卡栏的颜色,这样SwiftUI就不会自动将其变为透明。

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

var window: UIWindow?

func scene(
    _ scene: UIScene,
    willConnectTo session: UISceneSession,
    options connectionOptions: UIScene.ConnectionOptions
) {

    guard let windowScene = (scene as? UIWindowScene) else { return }        

    // MARK: ADD THIS CODE BELOW TO YOUR SCENE DELEGATE.
    
    // TAB BAR BACKGROUND COLOR HERE.
    UITabBar.appearance().barTintColor = UIColor.white
    
    // TAB BAR ICONS COLOR HERE.
    UITabBar.appearance().tintColor = UIColor.blue
    UITabBar.appearance().isTranslucent = true
    
    if #available(iOS 15.0, *) {
        let appearance = UITabBarAppearance()
        appearance.configureWithOpaqueBackground()
        
        // TAB BAR BACKGROUND COLOR HERE. (same as above)
        appearance.backgroundColor = UIColor.white
        UITabBar.appearance().standardAppearance = appearance
        UITabBar.appearance().scrollEdgeAppearance = UITabBar.appearance().standardAppearance
    }
    
    let window = UIWindow(windowScene: windowScene)
    window.rootViewController = UIHostingController(rootView: RootView())
        self.window = window
        window.makeKeyAndVisible()
    }
}

702