[iOS] UIUserInterfaceSizeClass 알아보기

  [iOS] UIUserInterfaceSizeClass 알아보기


이번 프로젝트에서 iPad 화면 분활부터 MultiWindow 지원등 여러가지를 알아보다가 소스 상으로 SizeClass 하는 코드를 정리하고자 합니다.

  소스참고


//
//  ViewController.swift
//  AutoLayout_ClassSize
//
//  Created by JW_Macbook on 2020/01/13.
//  Copyright © 2020 JW_Macbook. All rights reserved.
//

import UIKit

class ViewController: UIViewController {
    
    /// 화면전환시 마다 나타낼 라벨
    @IBOutlet weak var displayLb: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        // 해당 정보를 호출하지 않으면, 초기값에는 해당 함수가 발동하지 않는데.
        // 현재 가지고 있는 가로, 세로 정보 호출해 보기.
        self.traitCollectionDidChange(self.traitCollection)
        
        // Size Class 값
        let horizontal:UIUserInterfaceSizeClass = self.traitCollection.horizontalSizeClass
        let vertical:UIUserInterfaceSizeClass = self.traitCollection.verticalSizeClass
        
        if horizontal == .regular && vertical == .regular {
            print("이렇게도 체크 가능합니다.")
        }
    }

    /// 화면 사이즈 변환시 타는 함수.
    /// AutoLayout r:r, c:r 등 구분함.
    /// - Parameter previousTraitCollection: 가로, 세로 값 들어옵니다.
    override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
        super.traitCollectionDidChange(previousTraitCollection)
        
        switch (traitCollection.horizontalSizeClass, traitCollection.verticalSizeClass) {
        case (.regular, .regular):
            print("화면전환 r:r 값 (iPad fullSize 가로모드, 세로모드)")
            self.displayLb.text = "regular, regular"

        case (.compact, .compact):
            print("화면전환 c:c 값 (iPhone 가로모드)")
            self.displayLb.text = "compact, compact"

        case (.regular, .compact):
            print("화면전환 r:c 값 (iPad 화면 분활시 Size에 따라 변경됨)")
            self.displayLb.text = "regular, compact"

        case (.compact, .regular):
            print("화면전환 c:r 값 (iPhone 세로모드)")
            self.displayLb.text = "compact, regular"

        default: break
        }
    }

}


  마무리

SizeClass 코드로 현재 화면 회전 부터 분활시 코드는 프로젝트에서 작업중인데, 단점으로는 iPad FullSize 의 가로세로 모드는 둘다 .regular, .regular 정보로 나오기때문에 UIInterfaceOrientation 정보를 추가로 가로세로(portrait, landscape) 확인하면 모든 정보를 알 수 있습니다.


댓글