SwiftUI-更改TabBar图标颜色

时间:2019-07-19 09:46:51

标签: swift view colors tabbar swiftui

我无法在SwiftUI中更改TabBar颜色。我尝试使用TabbedView,图像/文本和堆栈。什么都不适合我。

使用.foregroundColor无效。

TabbedView(selection: $selection){
 TextView()
  .tag(0)
  .tabItemLabel(
 VStack {
  Image("Calendar")
   .foregroundColor(.red)
  Text("Appointments")
   .foregroundColor(.red)
  }
 ).foregroundColor(.red)
}.foregroundColor(.red)

7 个答案:

答案 0 :(得分:16)

解决方案1 ​​

使用renderingMode(.template)

struct MainView: View {

    var body: some View {
       TabView {
            LoginView().tabItem {
                VStack {
                    Text("Login")
                    Image("login").renderingMode(.template)
                }
            }

            HomeView().tabItem {
                VStack {
                    Text("Home")
                    Image("home").renderingMode(.template)
                }
            }
        }.accentColor(.orange)
    }
}

解决方案2

设置tabItem类型

enum TabViewItemType: String {
    case login  = "login"
    case home   = "home"
    case search = "search"

    var image: Image {
        switch self {
        case .login:  return Image("login")
        case .home:   return Image("home")
        case .search: return Image("search")
        }
    }

    var text: Text {
        Text(self.rawValue)
    }
}
struct MainView: View {

    var body: some View {
        TabView {
            LoginView()
                .tabItem { TabViewItem(type: .login) }

            HomeView()
                .tabItem { TabViewItem(type: .home) }

            SearchView()
                .tabItem { TabViewItem(type: .search) }

        }.accentColor(.orange)
    }
}

struct TabViewItem: View {

    var type: TabViewItemType

    var body: some View {
        VStack {
            type.image.renderingMode(.template)
            type.text

        }
    }
}

答案 1 :(得分:10)

使用accentColor

        TabView(selection: $selection) {
            NavigationView {
                HomeView()
            }.navigationBarTitle("Home")
                .tabItem {
                    VStack {
                        if selection == 0 {
                            Image(systemName: "house.fill")
                        } else {
                            Image(systemName: "house")
                        }
                        Text("Home")
                    }
                }
            .tag(0)
            NavigationView {
                SettingsView()
            }.navigationBarTitle("Settings")
                .tabItem {
                    VStack {
                        Image(systemName: "gear")
                        Text("Settings")
                    }
                }
                .tag(1)
        }.accentColor(.purple)

答案 2 :(得分:1)

我认为您可以只使用TabView的accentColor,它对我有用:]

select * from table where '2020-10-08 12:15:10' between startDate and endDate

答案 3 :(得分:0)

当前SwiftUI尚无直接方法。

除非UIKit引入任何新的解决方案,否则我们必须使用SwiftUI方法。

尝试以下代码:

struct ContentView: View {

    init() {
        UITabBar.appearance().backgroundColor = UIColor.purple
    }

    var body: some View {
        return TabbedView {
            Text("This is tab 1")
                .tag(0)
                .tabItem {
                    Text("tab1")
            }
            Text("This is tab 2")
                .tag(1)
                .tabItem {
                    Text("tab1")
            }
            Text("This is tab 3")
                .tag(2)
                .tabItem {
                    Text("tab1")
            }
        }
    }
}

答案 4 :(得分:0)

我为Image进行了扩展,该扩展使用具有浅色的UIImage初始化:

extension Image {
    init(_ named: String, tintColor: UIColor) {
        let uiImage = UIImage(named: named) ?? UIImage()
        let tintedImage = uiImage.withTintColor(tintColor,
                                                renderingMode: .alwaysTemplate)
        self = Image(uiImage: tintedImage)
    }
}

答案 5 :(得分:0)

您可以使用 UITabBar.appearance()进行一些自定义,直到Apple提供了更标准的方式来更新SwiftUI TabView

更改TabItem(文本+图标)颜色

init() {
  UITabBar.appearance().unselectedItemTintColor = UIColor.white
}

更改TabView背景颜色

init() {
  UITabBar.appearance().backgroundColor = UIColor.red
  UITabBar.appearance().backgroundImage = UIImage()
}

总体代码如下-

struct ContentView: View {

   init() {
       // UITabBar customization
   }

  var body: some View {
     TabView(selection: $selection) {
         FirstTabView()
              .tabItem {
                  VStack {
                     Image(systemName: "map")
                     Text("Near Me")
                  }
              }
     }
  }

}

使用 .accentColor 修改器更改所选 tabItem

的颜色

尝试了许多选择之后,这对我有用。

答案 6 :(得分:0)

如果您需要使用 SwiftUI 界面为整个应用程序设置强调色,您只需要在 Assets.xcassets 文件中定义 AccentColor,如下图所示。 TabBar 图标无需任何额外代码即可获得。

enter image description here