SwiftUI View Paging
iOS 14 이상 스위프트UI의 신기능으로 TabView를 이용해서 페이징을 할 수 있는 기능이 추가되었다. 아래 동영상처럼 UICollectionView의 isPagingEnabled의 대체 기능이다.
ScrollView를 horizontal로 설정하고, TabView를 만든 후에 안에서 View들을 생성한다. 이때, 모디파이어를 이용해서 tabViewStyle을 PageTabViewStyle()로 해주면 간단하게 만들 수 있다. (…근데 왜 이게 TabView로 기능이 들어간걸까?… 이름을 보면 매칭이 되긴하는데… 뭔가 흠…)
1 2 3 4 5 6 7 8 |
ScrollView(.horizontal) { TabView { ForEach( ) { ... } .tabViewStyle(PageTabViewStyle()) } } |
버그?:
TabView안의 Foreach 문을 이용해서 뷰를 만들 때, 변수나 뷰 모델을 이용해서 만들고 특정 시점에 업데이트 해주고 싶을 수 있다. 그런데, 나의 경우에는 하단의 인디케이터 수만 변하고, 실제 뷰들은 업데이트가 되지 않는 증상을 겪었다. (StackView들의 경우에는 다이나믹하게 잘 변했음.)
깔끔하지는 않겠지만, viewModel 내부에 변수를 하나 선언하고, viewModel이 업데이트 될 때마다 값을 변화시켜 주자. 그리고 실제 TabView는 그 변수에 의해 나타나고 사라지도록 if문으로 감싸주면, 강제로 갱신시킬 수 있다.
1 2 3 4 5 6 7 8 9 10 |
ScrollView(.horizontal) { if viewModel.isShown { TabView { ForEach( ) { ... } .tabViewStyle(PageTabViewStyle()) } } } |
버그인 줄도 모르고 왜 안 되지 하다가, 이거 때문에 몇 시간 버리고 눈물 끝에 포스팅을 쓴다.