수색…


비고

적응 형 앱을 개발할 때 크기 클래스의 한계를 명심하십시오. 정확한 픽셀 크기 또는 장치에 대한 구체적인 가이드가 아닌 일반화 입니다. 앱이 어떤 기기에서 실행 중인지 또는 크기 클래스를 기반으로 분할 화면 모드인지 확인하지 마세요.

대신 크기 클래스에 대한 상위 수준의 레이아웃 결정을하고 자동 레이아웃을 사용하여 정확한보기 프레임을 변경하십시오. (UIViewController 메서드 인 viewWillTransition(to:with:) 도 참조하십시오. 전환 후 얼마나 큰 컨트롤러 뷰가 표시되는지 더 정확하게 알 수 있습니다.)

특성 컬렉션

iOS 앱에서 사용자 인터페이스는 몇 가지 일반적인 모양과 크기 중 하나를 취할 수 있습니다. 이는 뷰 또는 뷰 컨트롤러의 특성 컬렉션을 통해 사용할 수있는 크기 클래스를 사용하여 정의됩니다.

Apple은 두 가지 크기의 클래스를 정의합니다 : 일반소형 . 이러한 각 크기 클래스는 장치의 두 축 ( 수평수직 )에서 사용할 수 있습니다. 앱은 평생 동안이 네 가지 주에 존재할 수 있습니다. 약식으로, 개발자는 종종 수평축을 먼저두고 두 가지 크기 클래스를 말하거나 쓰면서 크기 클래스 조합을 설명합니다. "Compact / Regular"는 수평 적으로 작지만 수직으로 규칙적인 인터페이스를 설명합니다.

앱에서 UITraitEnvironment 프로토콜의 메소드를 사용하여 현재 크기 클래스를 확인하고 변경 사항에 응답하십시오.

class MyViewController: UIViewController {
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        print("Horizontal size class: \(traitCollection.horizontalSizeClass)")
        print("Vertical size class: \(traitCollection.verticalSizeClass)")
    }

    override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
        super.traitCollectionDidChange(previousTraitCollection)
        print("Trait collection changed; size classes may be different.")
    }
}

UIView와 UIViewController는 모두 UITraitEnvironment를 따르므로 현재 특성 컬렉션을보고 해당 하위 클래스의 변경 사항을 처리 할 수 ​​있습니다.

특성 모음 변경으로 자동 레이아웃 업데이트

레이아웃을 변경하여 크기 클래스 변경에 응답하는 응용 프로그램을 적응 시키는 것은 종종 자동 레이아웃 시스템의 많은 도움을 필요로합니다. 앱이 적응할 수있는 주요 방법 중 하나는보기의 크기 클래스가 변경 될 때 활성 자동 레이아웃 제약 조건을 업데이트하는 것입니다.

예를 들어, UIStackView를 사용하여 두 개의 UILabel을 정렬하는 응용 프로그램을 생각해보십시오. 이러한 레이블을 수평 적으로 좁은 환경에서 서로 겹치기를 원할 수도 있지만 수평 적으로 규칙적인 환경에서 좀 더 많은 공간이있을 때 서로 옆에 앉아 있어야합니다.

class ViewController: UIViewController {
    var stackView: UIStackView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        stackView = UIStackView()
        for text in ["foo", "bar"] {
            let label = UILabel()
            label.translatesAutoresizingMaskIntoConstraints = false
            label.text = text
            stackView.addArrangedSubview(label)
        }
        
        view.addSubview(stackView)
        stackView.translatesAutoresizingMaskIntoConstraints = false
        stackView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        stackView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
    }
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        updateAxis(forTraitCollection: traitCollection)
    }
    
    override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
        super.traitCollectionDidChange(previousTraitCollection)
        updateAxis(forTraitCollection: traitCollection)
    }
    
    private func updateAxis(forTraitCollection traitCollection: UITraitCollection) {
        switch traitCollection.horizontalSizeClass {
        case .regular:
            stackView.axis = .horizontal
        case .compact:
            stackView.axis = .vertical
        case .unspecified:
            print("Unspecified size class!")
            stackView.axis = .horizontal
        }
    }
}

iPad에서 iOS 멀티 태스킹 지원

최신 iOS 응용 프로그램의 핵심 기능 중 하나는 iPad에서 멀티 태스킹을 지원하는 것입니다. 기본적으로 Xcode 7 이상에서 생성 된 응용 프로그램은 멀티 태스킹을 지원하도록 구성됩니다. 자동 레이아웃을 사용하는 LaunchScreen.storyboard 파일이 있습니다.

기존 앱이 멀티 태스킹을 선택하는 가장 쉬운 방법은 스토리 보드를 만든 다음 프로젝트의 실행 화면으로 설정하는 것입니다.

실행 화면 스토리 보드 추가

Launch Screen File 옵션 구성

앱이 iPad 멀티 태스킹을 지원하면 기존보기를 감사하고 컨트롤러를 사용하여 자동 레이아웃을 사용하고 다양한 크기의 클래스 조합을 지원할 수 있는지 확인합니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow