ale*_*our 5 background toolbar swiftui
从 iOS 16 开始,我们可以轻松地自定义导航栏的背景:
.toolbarBackground(barBackgroundGradient, for: .navigationBar)
.toolbarBackground(.visible, for: .navigationBar)
Run Code Online (Sandbox Code Playgroud)
运作良好。
但是,我无法使其适用于底部工具栏:
.toolbarBackground(barBackgroundGradient, for: .bottomBar)
.toolbarBackground(.visible, for: .bottomBar)
Run Code Online (Sandbox Code Playgroud)
它正在编译,但应用程序上没有任何变化。
查看开发人员文档,它应该可以工作......
我也尝试过:
.toolbarBackground(barBackgroundGradient, for: .navigationBar, .bottomBar)
Run Code Online (Sandbox Code Playgroud)
它不会改变任何东西。
任何想法 ?
在寻找类似问题的答案后,我的解决方案是创建一个UIToolbar 扩展,如下所示:
extension UIToolbar {
static func changeAppearance(clear: Bool) {
let appearance = UIToolbarAppearance()
if clear {
appearance.configureWithOpaqueBackground()
} else {
appearance.configureWithDefaultBackground()
}
// customize appearance for your needs here
appearance.shadowColor = .clear
appearance.backgroundColor = .clear
appearance.backgroundImage = UIImage(named: "imageName")
UIToolbar.appearance().standardAppearance = appearance
UIToolbar.appearance().compactAppearance = appearance
UIToolbar.appearance().scrollEdgeAppearance = appearance
}
}
Run Code Online (Sandbox Code Playgroud)
因此,我认为,在您的情况下,可以先使用 CAGradientLayer 创建 barBackgroundGradient ,然后将其转换为UIImage并在外观.backgroundImage中使用它。
毕竟,在视图的初始化程序中调用changeAppearance :
init() {
UIToolbar.changeAppearance(clear: true)
}
Run Code Online (Sandbox Code Playgroud)
可能这不是最优雅的方式,特别是关于渐变部分,所以也许在苹果修复这个问题之前你会找到其他解决方案,因为它似乎是一个错误。