[英]SwiftUI: TabView dynamic accentColor
In my app I have 2 tabs.在我的应用程序中,我有 2 个选项卡。
First tab view has white background.第一个选项卡视图具有白色背景。
Second tabView has black background.第二个 tabView 有黑色背景。
Because of that I would like to change tabbar style depending on what TabBarItem selected因此,我想根据选择的 TabBarItem 更改标签栏样式
When tab1 is selected, I would like tab bar icons color to be:选择 tab1 时,我希望标签栏图标颜色为:
selected - black, unselected - grey
When tab2 is selected, I would like to change colors to:选择 tab2 时,我想将 colors 更改为:
selected - white, unselected - grey
I'm able to change icon color with accentColor
property like that:我可以像这样使用accentColor
属性更改图标颜色:
TabView {
FirstTabView()
.tabItem {
Image("tab1").renderingMode(.template)
}
SecondTabView()
.tabItem {
Image("tab2").renderingMode(.template)
}
}.accentColor(.white)
But how to change icon color when user click on second tab?但是当用户单击第二个选项卡时如何更改图标颜色?
I tried something like that:我尝试过这样的事情:
@State private var selection = 0
TabView(selection: $selection) {
FirstTabView()
.tabItem {
Image("tab1").renderingMode(.template)
}
SecondTabView()
.tabItem {
Image("tab2").renderingMode(.template)
}
}.accentColor(selection == 0 ? .black : .white)
But it doesn't work但它不起作用
To update tab items TabView
should be rebuilt, so try要更新选项卡项TabView
应该重建,所以尝试
Here is a full demo (colors changed for better visibility).这是一个完整的演示(颜色更改以获得更好的可见性)。 Tested with Xcode 13 / iOS 15用 Xcode 13 / iOS 15 测试
struct DemoView: View {
@State private var selection = 0
var body: some View {
TabView(selection: $selection) {
Text("FirstTabView")
.tabItem {
Image(systemName: "1.circle").renderingMode(.template)
}.tag(0)
Text("SecondTabView")
.tabItem {
Image(systemName: "2.circle").renderingMode(.template)
}.tag(1)
}
.accentColor(selection == 0 ? .red : .blue)
.id(selection) // << here !!
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.