TabBar
is a highly customizable tab bar view made in SwiftUI that functions similarly to TabView
.
Similar to TabView
, the TabBar
accepts a Binding value that conforms to Hashable
.
import SwiftUI
import TabBarModule
struct ContentView: View {
@State private var item: Int = 0
var body: some View {
TabBar(selection: $item) {
HomeView()
.tabItem(0) {
Image(systemName: item == 0 ? "house.fill" : "house")
.font(.title3)
Text("Home")
.font(.system(.footnote, design: .rounded).weight(item == 0 ? .bold : .medium))
}
MarksView()
.tabItem(1) { /* ... */ }
UserView()
.tabItem(2) { /* ... */ }
}
}
}
The TabBar
provides a default style when no other modifiers are set.
With modifiers, it is easy to set the TabBar
's styles.
TabBar(selection: $item) {
// ...
}
.tabBarFill(.regularMaterial)
.tabBarMargins(.vertical, 8)
.tabBarPadding(.vertical, 8)
.tabBarPadding(.horizontal, 16)
.tabBarShape(RoundedRectangle(cornerRadius: 16, style: .continuous))
.tabBarShadow(radius: 1, y: 1)
The TabBar
accepts any background shape that conforms to the Shape
protocol (e.g., Capsule
).
TabBar(selection: $item) { /* ... */ }
.tabBarPadding(.vertical, 8)
.tabBarPadding(.horizontal, 16)
.tabBarShape(Capsule(style: .continuous))
.tabBarFill(.linearGradient(
colors: [.yellow, .yellow.opacity(0.4)],
startPoint: .top, endPoint: .bottom))
The TabBar
accepts any fill that conforms to the ShapeStyle
protocol.
TabBar(selection: $item) { /* ... */ }
.tabBarFill(.linearGradient(
colors: [.orange, .yellow], startPoint: .top, endPoint: .bottom))
In addition to using ShapeStyle
for filling, you can also use any view to set the foreground of the TabBar
.
TabBar(selection: $item) { /* ... */ }
.tabBarForeground {
Image("BarOrange").resizable().scaledToFill()
}
.tabBarShape(RoundedRectangle(cornerRadius: 16, style: .continuous))
.tabBarShadow(radius: 1, y: 2)
The TabBar
accepts a Binding value of type Visibility
to control its visibility. When visibility is set to .automatic
, the TabBar
will observe the keyboard's appearance to automatically show or hide itself.
You can customize the animation and transition for the appearance and disappearance of the TabBar
.
TabBar(selection: $item, visibility: $visibility) { /* ... */ }
.tabBarTransition(.move(edge: .bottom).combined(with: .opacity))
.tabBarAnimation { isTabBarVisible in
isTabBarVisible ? .easeInOut : .linear
}
Requirement: iOS 15.0+
Swift Package Manager (SPM)
Add the following line to the dependencies in Package.swift
, to use the TabBarModule
in a SPM project:
.package(url: "https://github.com/zijievv/swiftui-tab-bar", from: "0.0.1"),
In your target:
.target(name: "<TARGET_NAME>", dependencies: [
.product(name: "TabBarModule", package: "swiftui-tab-bar"),
// ...
]),
Add import TabBarModule
into your source code to use TabBar
.
Go to File > Add Package Dependencies...
and paste the repo's URL:
https://github.com/zijievv/swiftui-tab-bar.git