[TIL] 스크롤뷰 트러블 슈팅

Eden·2025년 8월 28일

문제 상황

앱의 통계 화면을 구현하면서 StatsViewControllerUIScrollView
사용했습니다.
테스트 과정에서 흥미로운 문제를 발견했습니다.

  • iPhone 16e → 정상 동작 (스크롤 가능)
  • (실기기) iPhone 16 Pro → 정상 동작 (스크롤 가능)
  • iPhone 16 Pro Max → 스크롤 동작하지 않음

즉, 일부 기기에서만 스크롤이 막혀 버리는 현상이 발생했습니다.

코드는 대략 아래와 같이 작성되어 있었습니다.

private let scrollView = UIScrollView().then {
  $0.backgroundColor = .gray100
}

구조적으로도 큰 문제가 없어 보였기 때문에 처음에는 레이아웃 제약을
의심했습니다.


원인 분석

기기별 화면 크기 차이

Pro Max 기기는 화면 크기가 크다 보니, contentStackView의 높이가 기기
화면보다 작은 경우가 생깁니다.
이럴 경우 스크롤뷰 입장에서는 "스크롤할 필요가 없다"고 판단하기 때문에
스크롤이 비활성화됩니다.

작은 화면에서는 콘텐츠가 화면을 넘어가므로 자연스럽게 스크롤이
발생했지만, 큰 화면(iPhone 16 Pro Max)에서는 콘텐츠가 화면 안에 모두
들어오면서 스크롤이 동작하지 않았던 것이죠.


해결 방법

해결책은 간단했습니다.

private let scrollView = UIScrollView().then {
  $0.backgroundColor = .gray100
  $0.alwaysBounceVertical = true
}

alwaysBounceVertical 속성을 true로 주면, 콘텐츠 높이가 스크롤뷰
높이보다 작더라도 항상 세로 스크롤이 가능해집니다.

이 설정을 추가하니 iPhone 16 Pro Max에서도 정상적으로 스크롤이
작동했습니다.


정리

  • 문제 원인: 큰 화면에서는 콘텐츠가 충분히 크지 않아 스크롤이 필요
    없다고 판단됨
  • 해결 방법: scrollView.alwaysBounceVertical = true 설정 추가

이번 케이스는 기기별 해상도 차이 때문에 발생하는 전형적인 UIScrollView
트러블이었습니다.
이 경험을 통해 "작은 기기에서 잘 되더라도 큰 기기에서 문제가 없을지
반드시 확인해야 한다"는 점을 다시 한번 느꼈습니다.

앞으로는 스크롤뷰의 동작 조건을 항상 고려하면서 레이아웃을
설계하는 습관을 가져야겠습니다.

profile
iOS Dev

0개의 댓글