Skip to content

Navigation Bar와 Sticky Header

sustainable-git edited this page Nov 17, 2021 · 1 revision

Navigation Bar와 Sticky Header

해결하려는 문제

  • SanTa 앱에서는 사용자의 경험(UX)를 극대화 하기 위한 여러 장치들이 있다
  • 그 중 하나는 기록 화면에서 Navigation Bar를 스크롤 위치에 따라 hidden을 하는 것과 Sticky Header를 적용시키는 것이다

발생한 문제

의도한 형태 발생한 버그
  • 경우에 따라 Sticky Header가 잘 작동하거나, 작동하지 않는 때가 있다

해결 과정

  • Navigation Bar가 Hidden되기 전에 Sticky Header가 적용되어야 하는 순서의 문제인가?

    • Sticky Header가 작동하는 코드는 Compositional Layout을 만드는 곳에 존재한다
    • 이는 NSCollectionLayoutSection을 반환하는 코드에 존재한다
    • NSCollectionLayoutBoundarySupplementaryItem을 만들고, pinToVisibleBounds = true 를 설정하면 된다
    • 때문에 이 코드가 발생하기 전에 Navigation Bar를 isHidden=false를 시켜주어야 한다고 생각했다
  • 순서의 문제가 아니었다

    • pinToVisibleBounds = true 이전에 NavigationBar.isHidden = false 를 적용해도 버그는 없어지지 않았다
  • Compositional Layout을 한 번만 만들기 때문에 탭을 이리저리 바꾸면 다시 문제가 발생하는 것인가?

    • Compositional layout은 탭을 변경할 때 마다 다시 만들기 때문에 해당 문제는 아니었다
  • Scroll 과정에서 나타나는 문제인가

    • NavigationBar.isHidden = false 를 항시 적용하면 문제가 없다
    • 때문에 Scroll 과정에서 어떠한 문제가 발생한다고 생각했다
    • 특히, 가끔 NavigationBar 크기만큼 화면이 더 올라가는 버그가 발생하는 것을 보면, 이 부분에 문제가 있는 것이 확실해 보였다
  • 변경된 Layout을 알리는 부분이 없어서인가?

    • collectionView.setNeedsLayout()을 호출했지만, 해결되지 않았다
    • 이를 다시 Self.view.setNeedsLayout()을 호출하니 문제가 해결되었다

결론

  • Layout이 변경되었는데, 변경사항이 잘 적용되지 않으면 setNeedsLayout()을 호출해 보자
Clone this wiki locally