如何使用SwiftUI在iOS 16上更改底部工具栏的背景?

5
自从iOS 16以来,我们可以轻松地使用以下方式自定义navigationBar的背景:
.toolbarBackground(barBackgroundGradient, for: .navigationBar)
.toolbarBackground(.visible, for: .navigationBar)

它运行得很好。

但是,我无法使其在底部工具栏上运行:

.toolbarBackground(barBackgroundGradient, for: .bottomBar)
.toolbarBackground(.visible, for: .bottomBar)

编译成功,但应用程序没有任何变化。

查看开发人员文档,应该可以正常工作...

我也尝试了这个:

.toolbarBackground(barBackgroundGradient, for: .navigationBar, .bottomBar)

它并没有改变任何事情。

有什么想法吗?


你好,我可以问一下,你最终找到解决方案了吗? - Luïs
我也遇到了同样的问题。我觉得这肯定是个bug。 - horseshoe7
我遇到了同样的问题。我觉得这一定是个bug。 - undefined
1个回答

0

在寻找类似问题的答案后,我的解决方案是创建一个像这样的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
    }
}

所以,在你的情况下,我认为可以先使用CAGradientLayer创建你的barBackgroundGradient,然后将其转换为UIImage并在appearance.backgroundImage中使用。

最后,在您的视图初始化程序内调用changeAppearance

init() {
    UIToolbar.changeAppearance(clear: true)
}

可能不是最优雅的方式,特别是涉及到梯度部分,所以在苹果修复这个问题之前,你可能会找到其他解决方案,因为它似乎是一个错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接