Swift UI Customizing TabBar Background Color in SwiftUI: A Comprehensive Guide

Customizing TabBar Background Color in SwiftUI: A Comprehensive Guide

As we tread the exciting journey of SwiftUI, the need to customize UI components according to our design aesthetics is paramount. A component that often needs a sprinkle of our brand’s essence is the TabBar. Today, I’m thrilled to walk you through a concise yet informative tutorial on changing the TabBar background color in SwiftUI. Let’s dive right in!


The TabView in SwiftUI gives us a convenient way to implement a multi-tab interface. Often, you’d want to modify its look to align with your app’s theme. In this tutorial, we’ll focus on changing the background color of the TabBar and customizing the tab item colors.

1. Setting the stage:

Before you begin, ensure you have a SwiftUI project set up and ready. In this tutorial, I’ve created a basic ContentView with four tab items. Each tab represents a test view.

2. Customizing TabBar Appearance:

SwiftUI does not have direct modifiers for TabBar customization. However, leveraging UIKit’s appearance API comes to our rescue:

init() {
    UITabBar.appearance().barTintColor = UIColor.red
    UITabBar.appearance().tintColor = UIColor.red
    UITabBar.appearance().unselectedItemTintColor = UIColor(.white.opacity(0.5))
    UITabBar.appearance().backgroundColor = UIColor.red

Here’s what each property does:

  • barTintColor: Changes the background color of the TabBar.
  • tintColor: Changes the color of the selected tab item.
  • unselectedItemTintColor: Modifies the color of unselected tab items.
  • backgroundColor: Can also be used to set the background color, providing another layer to play around with visuals.

3. Structuring the ContentView:

For our ContentView, we make use of a helper function, pageView, to reduce redundancy:

private func pageView<Content: View>(content: Content, title: String, imageName: String, tag: Int) -> some View {
        .tabItem {
            Label(title, systemImage: imageName)

This makes our main body cleaner and more readable:

TabView(selection: $selection) {
    pageView(content: TestView1(), title: "Tab 1", imageName: "thermometer.sun", tag: 0)
    // ... other tabs ...

4. Previewing:

Using the ContentView_Previews, you can quickly see your changes live without needing to run the entire app.

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {


While SwiftUI does usher in a new paradigm of app development, there are times when we must dance with UIKit. Modifying the TabBar is just one example. As SwiftUI matures, we can expect even more direct ways to handle such customizations. Until then, let your creativity shine through, and happy coding!

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Post