iOS interface environment에는 다음과 같은 trait이 포함됩니다.
- horizontal / vertical size class (수평, 수직 사이즈 클래스)
- display scale (디스플레이 픽셀에 관합니다.)
- user Interface idiom ( Enum으로 phone, pad, tv, carplay, mac...)
- user Interface style( 라이트모드, 다크모드인지.. lightMode, darkMode, unspecifiedMode)
여기서 horizontal / vertical의 size class만 살짝 보고 가겠습니다.
size class
size class는 portrait, landscape에 따라 현재 화면의 size class가 Compact / Regular로 결정됩니다.
portrait: 세로모드 landscape: 가로모드
또한 기기마다 Compact, Regular가 다르게 설정되어있고, 이에 따라 tabBar의 막대가 높아지는 것 같이 동적으로 layout을 조정한다고 합니다.
기기별 정보가 더 필요하시다면 아래에서 확인할 수 있습니다.
이 프로토콜을 채택하는 객체의 특성 환경(trait environment)에 접근하려면
UITraitEnvironment에 정의되어 있는 traitCollection 프로퍼티에 접근하면 됩니다.
또한 trait이 변경될 때 시스템이 호출하는 메서드가
func traitCollectionDidChange 입니다.
trait이 변경되었을 때 특정한 일을 해주고 싶다면, traitCollectionDidChange 메서드를 override하고 사용하면 됩니다.
아래처럼 말이죠.
UITraitCollection은 system으로부터 UIScreen으로 전달되고, View계층 구조를 따라 최하위의 View까지 전달됩니다.
** UIView는 UITraitEnvironment를 채택하고있습니다.
https://developer.apple.com/videos/play/wwdc2023/10057/