[TIL] UISheetPresentationController

박주하·2025년 7월 21일

UISheetPresentationController


  • iOS 15부터 도입된 하단에서 올라오는 시트 형태의 모달 화면을 제어하는 컨트롤러
  • 기존의 modalPresentationStyle = .pageSheet, .formSheet 방식보다 훨씬 유연하고 강력한 제어를 제공
  • 높이 단계 지정 가능: .detents 속성으로 medium / large 등 시트의 높이 설정 가능
  • 드래그로 사이즈 조절: 사용자가 위아래로 드래그해서 시트 높이 조절 가능
  • 그랩 핸들 표시: 상단의 회색 막대(grabber) 표시 가능
  • 배경 흐려짐: 기본적으로 배경은 흐릿하게 처리됨 (커스터마이징 가능)

주요 속성

속성설명
detents시트 높이 지정. .medium(), .large() 또는 .custom(...)
selectedDetentIdentifier현재 선택된 시트 높이 (.medium, .large)
prefersGrabberVisible상단에 회색 막대 표시 여부
prefersEdgeAttachedInCompactHeightcompact 환경에서 상단에 붙일지 여부 (iPhone에서는 주로 false)
preferredCornerRadius시트의 모서리 둥글기
largestUndimmedDetentIdentifier특정 시트 크기까지는 배경을 흐리지 않음

예제

let sheetVC = MyBottomSheetViewController()
if let sheet = sheetVC.sheetPresentationController {
    sheet.detents = [.medium(), .large()]  // 시트의 높이 단계
    sheet.prefersGrabberVisible = true     // 상단 핸들 표시
    sheet.prefersScrollingExpandsWhenScrolledToEdge = false
    sheet.preferredCornerRadius = 20       // 모서리 둥글게
}

sheetVC.modalPresentationStyle = .pageSheet
present(sheetVC, animated: true)

0개의 댓글