SwiftUI - TabView with NavigationView 生成灰色区域
SwiftUI - TabView with NavigationView generates gray area
当我将 isTranslucent 设置为 false 并结合 NavigationView.
有谁知道如何解决这个问题?问题如附图所示。
我需要将 translucent 设置为 false 否则我无法获得深色。
您可以设置背景颜色。不要将 isTranslucent 设置为 false,否则它会创建您提到的这些人工制品。
UITabBar.appearance().backgroundColor = .black
UINavigationBar.appearance().backgroundColor = .black
它变得更暗了。不过它并非完全不透明。
编辑: 刚刚观看了 UI 的现代化 iOS 13 这是做到这一点的方法:
TabView 和 NavigationView 实际上是 UIHostedController for the legacy UITabBarController and UINavigationController:
let appearance = UITabBarAppearance()
appearance.configureWithOpaqueBackground()
appearance.titleTextAttributes = [.foregroundColor: UIColor.white]
appearance.largeTitleTextAttributes = [.foregroundColor: UIColor .white]
然后在各种类型的外观上设置外观。
tabBar.standardAppearance = appearance
第二次编辑:
extension UINavigationController {
override open func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let appearance = UINavigationBarAppearance()
appearance.configureWithOpaqueBackground()
navigationBar.standardAppearance = appearance
navigationBar.compactAppearance = appearance
navigationBar.scrollEdgeAppearance = appearance
}
}
extension UITabBarController {
override open func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let appearance = UITabBarAppearance()
appearance.configureWithOpaqueBackground()
tabBar.standardAppearance = appearance
}
}
应该有一种更简洁的方法来访问 tabBar 和 navBar。
比这更简单,只需删除下一行:
UITabBar.appearance().isTranslucent = false
我在 SwiftUI 中使用 UIKit。我的标签栏是在情节提要中创建的,但是我获得额外底部的视图 space 是您提到的 swiftui 视图。我尝试了以上所有解决方案,但没有任何效果。
我正在使用 Xcode 12.4 进行开发。我的解决方案是在故事板中将半透明标记为真,底部额外的灰色条消失了。
只需在这样的扩展中对其进行自定义即可:
extension UITabBarController {
override open func viewDidLoad() {
super.viewDidLoad()
let appearance = UITabBarAppearance()
appearance.backgroundColor = .black
tabBar.standardAppearance = appearance
}
}
注意重写的函数必须是viewDidLoad()
。至少当它是 viewDidAppear(:)
函数时它对我不起作用。
当我将 isTranslucent 设置为 false 并结合 NavigationView.
有谁知道如何解决这个问题?问题如附图所示。
我需要将 translucent 设置为 false 否则我无法获得深色。
您可以设置背景颜色。不要将 isTranslucent 设置为 false,否则它会创建您提到的这些人工制品。
UITabBar.appearance().backgroundColor = .black
UINavigationBar.appearance().backgroundColor = .black
它变得更暗了。不过它并非完全不透明。
编辑: 刚刚观看了 UI 的现代化 iOS 13 这是做到这一点的方法:
TabView 和 NavigationView 实际上是 UIHostedController for the legacy UITabBarController and UINavigationController:
let appearance = UITabBarAppearance()
appearance.configureWithOpaqueBackground()
appearance.titleTextAttributes = [.foregroundColor: UIColor.white]
appearance.largeTitleTextAttributes = [.foregroundColor: UIColor .white]
然后在各种类型的外观上设置外观。
tabBar.standardAppearance = appearance
第二次编辑:
extension UINavigationController {
override open func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let appearance = UINavigationBarAppearance()
appearance.configureWithOpaqueBackground()
navigationBar.standardAppearance = appearance
navigationBar.compactAppearance = appearance
navigationBar.scrollEdgeAppearance = appearance
}
}
extension UITabBarController {
override open func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let appearance = UITabBarAppearance()
appearance.configureWithOpaqueBackground()
tabBar.standardAppearance = appearance
}
}
应该有一种更简洁的方法来访问 tabBar 和 navBar。
比这更简单,只需删除下一行:
UITabBar.appearance().isTranslucent = false
我在 SwiftUI 中使用 UIKit。我的标签栏是在情节提要中创建的,但是我获得额外底部的视图 space 是您提到的 swiftui 视图。我尝试了以上所有解决方案,但没有任何效果。
我正在使用 Xcode 12.4 进行开发。我的解决方案是在故事板中将半透明标记为真,底部额外的灰色条消失了。
只需在这样的扩展中对其进行自定义即可:
extension UITabBarController {
override open func viewDidLoad() {
super.viewDidLoad()
let appearance = UITabBarAppearance()
appearance.backgroundColor = .black
tabBar.standardAppearance = appearance
}
}
注意重写的函数必须是viewDidLoad()
。至少当它是 viewDidAppear(:)
函数时它对我不起作用。