繁体   English   中英

SwiftUI:TabView 动态强调颜色

[英]SwiftUI: TabView dynamic accentColor

在我的应用程序中,我有 2 个选项卡。

第一个选项卡视图具有白色背景。

第二个 tabView 有黑色背景。

因此,我想根据选择的 TabBarItem 更改标签栏样式

选择 tab1 时,我希望标签栏图标颜色为:

 selected - black, unselected - grey

选择 tab2 时,我想将 colors 更改为:

selected - white, unselected - grey

我可以像这样使用accentColor属性更改图标颜色:

TabView {
    FirstTabView()
         .tabItem {
             Image("tab1").renderingMode(.template)
          }
    SecondTabView()
        .tabItem {
              Image("tab2").renderingMode(.template)
         }
 }.accentColor(.white)

但是当用户单击第二个选项卡时如何更改图标颜色?

我尝试过这样的事情:

@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)

但它不起作用

要更新选项卡项TabView应该重建,所以尝试

这是一个完整的演示(颜色更改以获得更好的可见性)。 用 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM