SwiftUI TabView 的使用
xcode 13.4.1, swift 5.5, iOS 15.4
2022-08-21
TabView是在App使用的比較多的元件之一,這次就講講TabView在SwiftUI的基本使用方法。
1. 以下分別用了三個Text來做每個Tab的按鈕:分別是Tab1, Tab2, Tab3,三個Tab的內容也是Text,其內容分別為:Tab 1 Content 、 Tab 2 Content 和 Tab 3 Content。
import SwiftUI
struct TabViewExample: View {
var body: some View {
TabView {
Text("Tab 1 Content")
.tabItem {
Text("Tab1")
}
Text("Tab 2 Content")
.tabItem {
Text("Tab2")
}
Text("Tab 3 Content")
.tabItem {
Text("Tab3")
}
}
}
}
2. 也可以使用Label作為TabItem。
import SwiftUI
struct TabViewExample: View {
var body: some View {
TabView {
Text("Tab 1 Content")
.tabItem {
Text("Tab1")
}
Text("Tab 2 Content")
.tabItem {
Text("Tab2")
}
Text("Tab 3 Content")
.tabItem {
Label("Setting", systemImage: "gear")
}
}
}
}
3. 只要在TabView上把其tabViewStyle設置成PageTabViewStyle,就可以以翻頁的形式來呈現不同的Tab。
import SwiftUI
struct TabViewExample: View {
var body: some View {
TabView {
Text("Tab 1 Content")
.tabItem {
Text("Tab1")
}
Text("Tab 2 Content")
.tabItem {
Text("Tab2")
}
Text("Tab 3 Content")
.tabItem {
Label("Setting", systemImage: "gear")
}
}
.tabViewStyle(PageTabViewStyle())
}
}
4. 其實使用了PageTabViewStyle為tabViewStyle是有小圓點指示現在到哪一個Tab了,但因為白色,所以看不到,為了把它顯示出來,需要使用一個indexViewStyle方法設置PageIndexViewStyle,就可以將其顯示出來,實作如下。
import SwiftUI
struct TabViewExample: View {
var body: some View {
TabView {
Text("Tab 1 Content")
.tabItem {
Text("Tab1")
}
Text("Tab 2 Content")
.tabItem {
Text("Tab2")
}
Text("Tab 3 Content")
.tabItem {
Label("Setting", systemImage: "gear")
}
}
.tabViewStyle(PageTabViewStyle())
.indexViewStyle(
PageIndexViewStyle(backgroundDisplayMode: .always))
}
}
5.現在的TabItem基本上沒有太大的用處,你也可以把其刪除掉。
import SwiftUI
struct TabViewExample: View {
var body: some View {
TabView {
Text("Tab 1 Content")
Text("Tab 2 Content")
Text("Tab 3 Content")
}
.tabViewStyle(PageTabViewStyle())
.indexViewStyle(
PageIndexViewStyle(backgroundDisplayMode: .always))
}
}
6. TabView 的內容只要符合View就可以,像不同的佈局也可以,實作如下:
import SwiftUI
struct TabViewExample: View {
var body: some View {
TabView {
VStack {
Rectangle()
.foregroundColor(.orange)
.padding()
Rectangle()
.foregroundColor(.orange)
.padding()
}
HStack {
Circle()
.foregroundColor(.blue)
.padding()
Circle()
.foregroundColor(.blue)
.padding()
}
ZStack {
Capsule()
.foregroundColor(.brown)
.padding()
Text("I am a capsule.")
.foregroundColor(.yellow)
.font(.largeTitle)
}
}
.tabViewStyle(PageTabViewStyle())
.indexViewStyle(
PageIndexViewStyle(backgroundDisplayMode: .always))
}
}