TabViewとは
SwiftUIで使用できるViewのことで、
どういうViewかというと、Lineのように下のバーにいろんなタブがあって、タップすることで上の画面が切り替わるという機能です。
一番左をタップすれば、友達リストやスタンプが表示されたり、
メッセージをタップすれば、メッセージリストが表示されたりと、TabViewを実装することで、
簡単にあのような画面を作成することができます。
TabViewではLineのトップ画面のようなものだけではなく、
さまざまなViewを作成できます。
主に、以下のようなものがあります。
- 1. DefaultTabViewStyle(デフォルト)
- 2. PageTabViewStyle
- 3. CarouselTabViewStyle
1. DefaultTabViewStyle
上記で説明したLineのようなTabViewである。
デフォルトなので、tabViewStyleモディファイアを指定しない場合は、このViewスタイルで表示される。
import SwiftUI @main struct AppMain: App { @UIApplicationDelegateAdaptor (AppDelegate.self) var appDelegate class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { return true } } var body: some Scene { WindowGroup { ContentView() } } } struct ContentView: View { var body: some View{ TabView{ Text("チュートリアル1") .tabItem { Image(systemName: "1.square.fill") Text("First") } .tag(0) Text("チュートリアル2") .tabItem { Image(systemName: "2.square.fill") Text("second") } .tag(1) Text("チュートリアル3") .tabItem { Image(systemName: "3.square.fill") Text("third") } .tag(2) } } }
theシンプルのTabViewですね。
Lineの下のタブのようなUIを簡単に実装できます。
上ではImageですでにswiftuiで用意されている画像を使ってますが、自分で画像を指定することも可能です。
2. PageTabViewStyle
import SwiftUI @main struct AppMain: App { @UIApplicationDelegateAdaptor (AppDelegate.self) var appDelegate class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { return true } } var body: some Scene { WindowGroup { ContentView() } } } struct ContentView: View { var body: some View{ TabView{ Text("チュートリアル1") .frame(width: UIScreen.main.bounds.size.width, height: 500) .background(Color(red: 0.8, green: 0.8, blue: 0.8)) .tag(0) Text("チュートリアル2") .frame(width: UIScreen.main.bounds.size.width, height: 500) .background(Color(red: 0.6, green: 0.99, blue: 0.6)) .tag(1) Text("チュートリアル3") .frame(width: UIScreen.main.bounds.size.width, height: 500) .background(Color(red: 1, green: 0.75, blue: 0.78)) .tag(2) } .tabViewStyle(PageTabViewStyle()) .indexViewStyle(PageIndexViewStyle(backgroundDisplayMode: .always)) } }
TabViewに対して、
TabViewのモディファイである.tabViewStyle(PageTabViewStyle())
を指定することで、以下のような画面を作成できる。
よくチュートリアルで説明を簡単に横スクロールで説明していくスタイルであったり、
利用規約で使われたりする。
.tabViewStyle(CarouselTabViewStyle())
.indexViewStyle(PageIndexViewStyle(backgroundDisplayMode: .always))を指定することで、
画面スワイプした時に、今何番目の画面なのかを表示してくれる機能がある。
3. CarouselTabViewStyle
struct SampleTabBarView:View{ var body: some View{ TabView{ Text("チュートリアル1") .frame(width: 300, height: 500) .background(Color(red: 0.8, green: 0.8, blue: 0.8)) .tag(0) Text("チュートリアル2") .frame(width: 300, height: 500) .background(Color(red: 0.6, green: 0.99, blue: 0.6)) .tag(1) Text("チュートリアル3") .frame(width: 300, height: 500) .background(Color(red: 1, green: 0.75, blue: 0.78)) .tag(2) } .tabViewStyle(CarouselTabViewStyle()) .indexViewStyle(PageIndexViewStyle(backgroundDisplayMode: .always)) } }