弹出 Child NavigationView 时透明 TabBar iOS 15
Transparent TabBar when popping Child NavigationView iOS 15
我有一个带有 TabBar 的 SwiftUI 应用程序。
如果我从 NavigationView 打开详细子视图,然后单击“返回”,TabBar 将变为透明,在 TabBar 图标下方显示 Feed 中的项目。
- 在主页中,打开子导航详细视图。 --------------
- 进入详细视图后,单击“返回”。 --------------
- 您将看到此错误。标签栏将是透明的。 --------------
在 iOS15 中,Apple 已将对 scrollEdgeAppearance 的支持扩展到 UIKit。
默认情况下,此设置会生成透明的 TabBar 背景。
要解决此问题,请将下面的代码添加到您的 SceneDelegate 文件中,以定义 TabBar 的颜色,这样它就不会被 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()
}
}
这就是我需要做的。
if #available(iOS 15.0, *) {
let tabBarAppearance = UITabBarAppearance()
tabBarAppearance.configureWithDefaultBackground()
UITabBar.appearance().scrollEdgeAppearance = tabBarAppearance
}
我有一个带有 TabBar 的 SwiftUI 应用程序。 如果我从 NavigationView 打开详细子视图,然后单击“返回”,TabBar 将变为透明,在 TabBar 图标下方显示 Feed 中的项目。
- 在主页中,打开子导航详细视图。 --------------
- 进入详细视图后,单击“返回”。 --------------
- 您将看到此错误。标签栏将是透明的。 --------------
在 iOS15 中,Apple 已将对 scrollEdgeAppearance 的支持扩展到 UIKit。 默认情况下,此设置会生成透明的 TabBar 背景。
要解决此问题,请将下面的代码添加到您的 SceneDelegate 文件中,以定义 TabBar 的颜色,这样它就不会被 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()
}
}
这就是我需要做的。
if #available(iOS 15.0, *) {
let tabBarAppearance = UITabBarAppearance()
tabBarAppearance.configureWithDefaultBackground()
UITabBar.appearance().scrollEdgeAppearance = tabBarAppearance
}