如何解决根据选择的标签更改标签视图的颜色-Swiftui
我试图查看是否可以根据选择的标签项来更改底部标签视图的颜色。目前,我可以使用init中的以下代码清除tabview栏。
let tabBar = UITabBar.appearance()
init() {
tabBar.barTintColor = UIColor.clear
tabBar.backgroundImage = UIImage()
tabBar.shadowImage = UIImage()
}
...
TabView(selection: $selectedTab) {
FirstView()
.tabItem{
Text("First")
}
SecondView()
.tabItem{
Text("Second")
}
}
.onAppear{
setTabViewBackground()
}
func setTabViewBackground() {
if selectedTab != 0 {
tabBar.barTintColor = UIColor.blue
}
}
试图在主体重绘时仅触发该函数,如果这种声明式样式让我受益匪浅,但完全不改变tabview背景,则请idk。
解决方法
任何.appearance
都会影响外观本身之后创建的实例。因此解决方案是在外观配置更改后重新创建 TabView
。
这是方法的演示。在Xcode 12 / iOS 14上进行了测试。
struct DemoView: View {
let tabBar = UITabBar.appearance()
init() {
tabBar.barTintColor = UIColor.red
}
@State private var selectedTab = 0 // preserves selected tab
var body: some View {
TabView(selection: $selectedTab) {
Text("FirstView")
.tabItem{
Text("First")
}.tag(0)
Text("SecondView")
.tabItem{
Text("Second")
}.tag(1)
}
.onAppear {
setTabViewBackground() // called,because `id` is below
}
.id(selectedTab) // recreates entire above view with new tabbar
}
func setTabViewBackground() {
tabBar.barTintColor = selectedTab != 0 ? .blue : .red
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。