1. Picker와 switch를 활용한 간단 상단 탭뷰 1 - 상단 탭바 이름 변수 설정
// ContentView.swift
enum moneyTapInfo : String, CaseIterable {
case my = "내 보유"
case trend = "인기 종목"
case news = "경제 뉴스"
}
2. Picker와 switch를 활용한 간단 상단 탭뷰 2 - 기본 뷰에서의 MainView 불러오는 코드 작성
// ContentView.swift
struct ContentView: View {
var body: some View {
MainView()
}
}
3. Picker와 switch를 활용한 간단 상단 탭뷰 3 - MainView에서 기본적인 하단 탭바 구성
// ContentView.swift
struct MainView: View {
var body: some View {
NavigationView {
TabView {
ScrollViewReader { scrollView in
ScrollView {
EmptyView()
}
}
.tabItem {
Image(systemName: "house")
Text("홈")
}
ScrollViewReader { scrollView in
ScrollView {
EmptyView()
}
}
.tabItem {
Image(systemName: "suitcase")
Text("워크")
}
.badge(0)
ScrollViewReader { scrollView in
ScrollView {
EmptyView()
}
}
.tabItem {
Image(systemName: "building.2")
Text("클래스")
}
.badge(0)
ScrollViewReader { scrollView in
ScrollView {
MoneyTabTopTabView()
}
}
.tabItem {
Image(systemName: "m.square")
Text("머니")
}
.badge(0)
4. Picker와 switch를 활용한 간단 상단 탭뷰 4 - 마지막 탭에서 상단 탭바 구현
// ContentView.swift
struct MoneyTabTopTabView: View {
@State private var selectedPicker: moneyTapInfo = .my
var body: some View {
VStack {
Picker("Flavor", selection: $selectedPicker) {
ForEach(moneyTapInfo.allCases, id: \.self) {
Text($0.rawValue)
}
}
.pickerStyle(.segmented)
.padding()
detailView(moneyTabs: selectedPicker)
}
}
}
5. Picker와 switch를 활용한 간단 상단 탭뷰 5 - 상단 탭바 안의 페이지 구현 예시
// ContentView.swift
struct detailView: View {
var moneyTabs: moneyTapInfo
var body: some View {
ScrollView(.vertical, showsIndicators: false) {
switch moneyTabs {
case .my:
ForEach(0..<4) { _ in
Text("보유 주식")
.padding()
Image(systemName: "newspaper")
.resizable()
.frame(maxWidth: 70, minHeight: 70)
}
case .trend:
ForEach(0..<5) { _ in
Text("트렌드 나열")
}
case .news:
ForEach(0..<6) { _ in
Text("뉴스 기사 나열")
}
}
// switch 종료
}
// ScrollView 종료
}
}
6. namespace와 ViewBuilder를 활용한 간단 상단 탭뷰 1 - 기본적인 작업 동일하게 진행
1~5번 중 1,2,3,5번은 동일합니다.
1번
// ContentView.swift
enum moneyTapInfo : String, CaseIterable {
case my = "내 보유"
case trend = "인기 종목"
case news = "경제 뉴스"
}
2번
// ContentView.swift
struct ContentView: View {
var body: some View {
MainView()
}
}
3번
// ContentView.swift
struct MainView: View {
var body: some View {
NavigationView {
TabView {
ScrollViewReader { scrollView in
ScrollView {
EmptyView()
}
}
.tabItem {
Image(systemName: "house")
Text("홈")
}
ScrollViewReader { scrollView in
ScrollView {
EmptyView()
}
}
.tabItem {
Image(systemName: "suitcase")
Text("워크")
}
.badge(0)
ScrollViewReader { scrollView in
ScrollView {
EmptyView()
}
}
.tabItem {
Image(systemName: "building.2")
Text("클래스")
}
.badge(0)
ScrollViewReader { scrollView in
ScrollView {
MoneyTabTopTabView()
}
}
.tabItem {
Image(systemName: "m.square")
Text("머니")
}
.badge(0)
5번
// ContentView.swift
struct detailView: View {
var moneyTabs: moneyTapInfo
var body: some View {
ScrollView(.vertical, showsIndicators: false) {
switch moneyTabs {
case .my:
ForEach(0..<4) { _ in
Text("보유 주식들")
.padding()
Image(systemName: "newspaper")
.resizable()
.frame(maxWidth: 70, minHeight: 70)
}
case .trend:
ForEach(0..<5) { _ in
Text("트렌드 나열")
}
case .news:
ForEach(0..<6) { _ in
Text("뉴스 기사 나열")
}
}
// switch 종료
}
// ScrollView 종료
}
}
7. namespace와 ViewBuilder를 활용한 간단 상단 탭뷰 2 - 탭뷰 직접 제작해 구현
// ContentView.swift
struct MoneyTabTopTabView: View {
@State private var selectedPicker: moneyTapInfo = .my
@Namespace private var animation
var body: some View {
VStack {
animate()
detailView(moneyTabs: selectedPicker)
}
}
@ViewBuilder
private func animate() -> some View {
HStack {
ForEach(moneyTapInfo.allCases, id: \.self) { item in
VStack {
Text(item.rawValue)
.frame(maxWidth: .infinity/4, minHeight: 50)
.font(.title3)
.foregroundColor(selectedPicker == item ? .black: .gray)
if selectedPicker == item {
Capsule()
.foregroundColor(.black)
.frame(height: 3)
.font(.title3)
.matchedGeometryEffect(id: "info", in: animation)
}
}
.onTapGesture {
withAnimation(.easeInOut) {
self.selectedPicker = item
}
}
}
}
}
}
'Development > iOS' 카테고리의 다른 글
[SwiftUI] Toast Message 구현 예시 (0) | 2023.04.13 |
---|---|
[SwiftUI] 검색창 만들기 기본 예제 (0) | 2023.04.06 |
[SwiftUI][NavigationView] NavigationLink를 활용한 정보 목록 화면 및 상세 정보 화면 구현 방법 (0) | 2023.04.05 |
[Xcode][SwiftUI] Dark mode disable 다크모드 막는 방법 (라이트 모드만 활성화시키는 방법) (0) | 2023.04.03 |
[Xcode][SwiftUI] 앱 세로모드 고정 방법 (0) | 2023.04.02 |