iOS/Swift 어플 따라하기

[Swift] ContainerView 속 CollectionView(Horizontal) (NestedScrollView)

Chafle 2022. 4. 5. 23:26
반응형

지난시간 ScrollView레이아웃 설정에 이어서 오늘은 ContainerView안에 Horizontal CollectionView를 구현해보겠습니다

 

https://accompani-i.tistory.com/162

 

[Swift] ScrollView 개념과 레이아웃 설정(scrollview error)

스크롤뷰란 사진으로 ScrollView를 설명해보면 점선틀은 사용자들에게 보여지는 틀인 ScrollView이고 뒤에 배경은 ContentsView입니다. 애플사용자들을 예시로 들어보면 배경화면 바꿀 때 사진이 좀 크

accompani-i.tistory.com

 

 

오늘 완성할 NestedScrollView를 영상으로 먼저 보겠습니다.

 

 

 

 

 

 

 

NestedscrollView를 구현할 때 할 것들은 무엇이 있을까요?
1. Viewcontroller
2. ScrollView
3. ImgView
4. ContainerView
5. CollectionView

 

1. Viewcontroller
2. ScrollView는 지난시간 구현했고

 

이번시간에는

3. ImgView
4. ContainerView
5. CollectionView

로 nestedscrollview를 완성시켜 보겠습니다.

 

 

scrollview 안에 view 레이아웃설정 함으로 오류 해결(지난시간)

지난시간에 넣어준 scrollview-view 안에

img view와 stack view를 넣어주고

그 안에 containerview를 넣어줍니다.

 

 

containterview

 

 

 

containerview개수를 정하고 embed형태로 viewcontroller를 생성해 줍니다.

 

 

 

 

※homviewcontroller에서 이미 RecommendListViewController를 참조하고 있습니다.

그래서 homeviewController의 collection뷰를 그대로 가져와서 세팅해주는 작업을 해줍니다.

 

 

 

반응형

 

 


 

※ 참고

뷰 컨트롤러를 늘려서 item을 미리 보고 싶을 때는 사진과 같이 simlatedsize를 freeform으로 바꿔주세요

 

 

collectionView와 RecommendListViewcontroller와 delegate,datasource를 연결해줘야합니다.

 

 

UpComingViewController를 새로 만들어서 역할을 부여하는데, 

HomeViewController에 있는 CollectionView를 그대로 보여주는 역할을 합니다.(상단 동영상 참고)

※각각의 UI 레이아웃 설정, CustomClass설정도 생략하겠습니다. 

※ Homeviewcontroller의Item과, homeviewcontroller에 collectionviewcontroller의 item setting은 생략하겠습니다.

itemsetting은 RecommendListViewController에 할당함.


import UIKit

class UpComingViewController: UIViewController {

    var awardRecommendListViewController: RecommendListViewController!

    var hotRecommendListViewController: RecommendListViewController!

// 두 개의 뷰컨트롤러(award,hot)는 RecommendListViewController를 가지고 있다.

 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        if segue.identifier == "award" {

            let destinationVC = segue.destination as? RecommendListViewController

            awardRecommendListViewController = destinationVC

            awardRecommendListViewController.viewModel.updateType(.award)

            awardRecommendListViewController.viewModel.fetchItems()

        } else if segue.identifier == "hot" {

            let destinationVC = segue.destination as? RecommendListViewController

            hotRecommendListViewController = destinationVC

            hotRecommendListViewController.viewModel.updateType(.hot)

            hotRecommendListViewController.viewModel.fetchItems()

    //homeviewcontroller와 itdentifier로 segueway

        }

    }

    override func viewDidLoad() {

        super.viewDidLoad()

}

반응형