iOS 응용 (swift)
[iOS - swift] 디스플레이 확대/축소, 화면 확대 모드 감지 방법 (더 큰 텍스트, UIScreen.main.scale, UIScreen.main.nativeScale)
jake-kim
2025. 8. 20. 01:22
더 큰 텍스트 효과란?
- 더 큰 텍스트 효과 사용 시, 시스템 전체에 영향이 가서 아래처럼 UILabel같은 컴포넌트들이 커짐
- 더 큰 텍스트 효과 적용 방법은 아래에서 설명
![]() |
![]() |
- 앱 뿐만이 아닌 시스템 앱에도 영향
![]() |
![]() |
- 설정 > 디스플레이 및 밝기 > 디스플레이 확대/축소 >



코드에서 확대/축소 감지 방법
- UIScreen.main.nativeScale 사용
- 하드웨어 디스플레이가 렌더링하는 원래 배율을 의미
- 디스플레이 확대/축소에서 확대 옵션을 켜면 3.0이 3.65625으로 나옴
- cf) 일반적으로 많이 아는 UIScreen.main.scale은 UIKit이 사용하는 기본 좌표계(points)와 실제 픽셀(pixels)의 배율을 의미
- 일반 Retina 디스플레이: scale = 2.0
- Super Retina (iPhone X 이후): scale = 3.0
- 아래와같이 UIScreen의 확장으로 구현
extension UIScreen {
static var isDisplayZoomed: Bool {
let screen = UIScreen.main
return abs(screen.nativeScale - screen.scale) > .ulpOfOne
}
}
- `ulpOfOne`은 0에 가까운 값이며 부동소수점 오차가 있을 수 있기에 이 것을 사용한 것
- 예) 3.0 - 2.9999999999999996 → 사람이 보기엔 같지만, 기계적으로는 차이가 존재
- 이런 미세한 차이를 "사실상 0" 으로 처리하기 위해 ulpOfOne 을 임계값으로 둔 것
- 차이가 ulpOfOne 이하 → 사실상 같은 값 (확대 모드 아님)
- 차이가 ulpOfOne 초과 → 의미 있는 차이 (확대 모드임)



