
TabView
에 대해 알아보도록 합시다.
TabView
SwiftUI
는 UIKit
의 UITabBarController
와 동등한 기능을 가진 TabView
를 제공합니다. 사용자가 화면 하단의 막대를 사용하여 여러 View를 전환할 수 있습니다.
기본 형식으로 각 항목에 이미지와 제목을 제공해야 하며, 프로그래밍 방식으로 활성화되는 탭을 제어하려는 경우 선택적으로 태그를 추가해야 합니다. 간단하게 예제를 들어보도록 하겠습니다.
탭 표시 줄 인터페이스 만들기
첫번째
우선 GreenTabView
, RedTabView
, BlueTabView
라는 새로운 SwiftUI
파일을 만들어주고 각 이름에 맞는 색으로 아래와 같이 코드를 작성합니다.
struct GreenTabView: View { var body: some View { ZStack { Circle() .frame(width: 300, height: 300) .foregroundColor(.green) Text("\(3)") .font(.system(size: 70)) .foregroundColor(.white) .fontWeight(.bold) } } }
두 번째
ContentView
에 TabView{...}
를 사용하여 위에 만들어준 ColorTabView
를 호출해주겠습니다.
TabView { GreenTabView() RedTabView() BlueTabView() }

하단에 바 하나가 생성되었고 바를 터치해보면 각 뷰로 전환되는 것을 확인할 수 있습니다. 하지만 아무런 아이콘이 없기 때문에 어느 위치에 어느 뷰 가 있는지 확인할 수 없습니다. SF Symbols
를 사용하여 탭 안에 아이콘을 넣어주겠습니다.
세 번째
TabItem{...}
을 사용하여 TabView
에 아이콘 추가
struct ContentView: View { var body: some View { TabView { GreenTabView() .tabItem { Image(systemName: "house") Text("홈으로") } redTabView() .tabItem { Image(systemName: "person") Text("사용자") } blueTabView() .tabItem { Image(systemName: "bag") Text("장바구니") } } } }
.tabItem
에 각각 Image
와 Text
로 추가할 수 있지만 Label
을 이용하면 더 편합니다.
redTabView() .tabItem { Label("사용자", systemImage: "person") }

탭 표시 줄 색상 사용자 지정
기본적으로 탭 표시 줄 항목의 색상은 파란색으로 설정됩니다. 다음과 같이 .accentColor
수정자를 사용하여하여 TabView
의 아이콘 및 텍스트 색상을 변경할 수 있습니다.
struct ContentView: View { var body: some View { TabView {...} .accentColor(.red) } }

그러나 SwiftUI
프레임 워크에는 탭 바의 색상을 변경하기 위한 기본 제공 수정자가 없습니다.
이를 변경하려면 아래와 같이 UIKit
의 appearance API를 사용할 수 있습니다.
struct ContentView: View { var body: some View { TabView {...} .onAppear() { UITabBar.appearance().barTintColor = .white } .accentColor(.red) } }

프로그래밍 방식으로 탭 간 전환
보통 탭 바를 터치하여 탭 간 전환을 하게 됩니다. 하지만 프로그래밍 방식으로 버튼을 생성해 특정 탭으로 전환할 수 있습니다.
ContentView
에 @State
변수를 다음과 같이 선언해 줍니다.
@State private var selection = 0
그리고 TabView
에 selection
값으로 변수를 초기화해주겠습니다.
struct ContentView: View { @State private var selection = 0 var body: some View { TabView(selection: $selection) { Text("첫번째 뷰") .font(.system(size: 30)) .tabItem { Image(systemName: "house.fill") Text("홈으로") } .tag(0) Text("두번째 뷰") .font(.system(size: 30)) .tabItem { Image(systemName: "bookmark.circle.fill") Text("북마크") } .tag(1) Text("세번째 뷰") .font(.system(size: 30)) .tabItem { Image(systemName: "video.circle.fill") Text("비디오") } .tag(2) } } }
tag
수정자를 추가하여 각 탭 항목에 고유 색인을 부여합니다. 프로그래밍 방식으로 탭을 전환하려면 selection
변수 값을 업데이트하기 만하면 됩니다.
이제 다음 탭으로 전환되는 버튼을 하나 만들어 주겠습니다.
ZStack(alignment: .topTrailing) { TabView(selection: $selection) { ... } .accentColor(.red) .onAppear() { UITabBar.appearance().barTintColor = .white } Button(action : { selection = (selection + 1) % 3 }) { Text("다음") .font(.system(.headline)) .padding() .foregroundColor(.white) .background(Color.blue) .cornerRadius(10) .padding() } } } }

TabView에서 탭 표시 줄 숨기기
다음 TabView
와 NavigationView
구성 요소를 래핑 하여 NavigationView
에 TabView
를 포함할 수 있습니다.
struct ContentView: View { @State private var selection = 0 var body: some View { NavigationView { TabView(selection: $selection) { ... } .accentColor(.red) .onAppear() { UITabBar.appearance().barTintColor = .white } .navigationTitle("TabView")
이제 NavigationView
의 TabView
에 List
를 사용하여 아이템을 추가해주도록 하겠습니다.
TabView(selection: $selection) { List(1...10, id: \.self) { index in NavigationLink( destination: Text("아이템 \(index) 번 의 세부사항"), label: { Text("아이템 \(index)") }) }
탭 바의 첫 번째 부분이 비어있죠? 이곳에도 tag
와 아이콘
을 추가합니다.
.tabItem { Image(systemName: "house.fill") Text("홈으로") } .tag(0)

전체 코드
TabViewStyle
SwiftUI의 TabView는 UIPageViewController와 동일하게 여러 콘텐츠 화면을 스와이프 하고 하단에 paging dots을 사용하여 사용자에게 현재 위치를 표시할 수 있습니다.
tabViewStyle을 활성화하기 위해서는 .tabViewStyle()수정자를 TabView에 연결하고 PageTabViewStyle()을 전달해야 합니다.
// tabViewStyle.swift import SwiftUI struct tabViewStyle: View { var body: some View { TabView{ Color.red Color.blue Color.green Color.yellow } .tabViewStyle(PageTabViewStyle()) } }
경고
paging dots는 흰색과 반투명이므로 배경이 흰색이면 표시되지 않습니다.
이 문제를 해결하기 위해 배경을 추가할 수 있습니다.
만약 PageTabViewStyle에 배경을 추가 하고 싶으면 아래와 같이 코드를 작성할 수 있습니다.
// tabViewStyle.swift import SwiftUI struct tabViewStyle: View { var body: some View { TabView{ Color.red Color.blue Color.green Color.yellow } .tabViewStyle(PageTabViewStyle()) // .never 로 하면 배경 안보이고 .always 로 하면 인디케이터 배경 보입니다. .indexViewStyle(PageIndexViewStyle(backgroundDisplayMode: .always)) } }


읽어주셔서 감사합니다🤟
본 게시글의 전체 코드 GitHub 👇🏻
Seogun95/SwiftUI_TabView_TUT
SwiftUI TabView에 대해 알아봅시다. Contribute to Seogun95/SwiftUI_TabView_TUT development by creating an account on GitHub....
github.com
'SWIFTUI > View layout' 카테고리의 다른 글
SwiftUI : DisclosureGroup (Toggle / Slider) (0) | 2021.03.10 |
---|---|
SwiftUI : List (ListStyle / onDelete / onMove) (3) | 2021.03.09 |
SwiftUI : Lottie Animation(애니메이션) (1) | 2021.02.10 |
SwiftUI : List를 이용해서 Grid형식 만들기 (0) | 2021.02.09 |
SwiftUI : 반복되는 뷰 Struct (0) | 2021.02.08 |