1️⃣ 뷰를 이동했을 때 탭바가 새로 생기면 indicatorBar가 생기지 않습니다

image.png

요.. 사진에서의 문제였죠

이건 찾아보니,, layoutFNeeded() 타이밍이나 cellForItem(at:) 의 실패 때문에 일어난다고 하더라고요…?

DispatchQueue.main.asyncAfter(deadline: .now() + 0.01) {
    self.selectItem(at: 0)
}

selectItem(at:)을 호출할 때 collectionView의 셀들이 아직 렌더링이 안 돼서

guard let cell = tabCollectionView.cellForItem(at: IndexPath(item: selectedIndex, section: 0)) else { return }

이 코드가 결국 nil을 리턴한대요 그래가지고 위치 업데이트가 안 되는 그런 순서라고 하네요

해결법은!!

layoutSubviews() 또는 didMoveToWindow() 에서 selectItem(at:)을 호출해주면 됩니다

UIView가 실제로 화면에 딱 잘 붙고 collectionView가 셀을 렌더링 한 후에!! 호출되어야 indicator가 잘 나타난다고 합니다

override func layoutSubviews() {
    super.layoutSubviews()
        selectItem(at: 0)
}

요렇게 layoutSubviews() 에서 selectItem(at: 0) 을 해주니 뷰 이동을 했을 때도 처음부터 잘 뜨게 됩니다

image.png

하지만… 또 그러나

2️⃣ 최초 호출되는 탭바의 애니메이션 끄기