Storyboard의 Size Class에서 iPad도 가로/세로 레이아웃을 전환

1896 단어 XcodeiOSStoryboard
Storyboard의 Size Class로 iPhone의 종횡 레이아웃을 바꾸고 싶은 경우, Any/Any로 공통의 레이아웃 만들어, Any/Compact 옆용으로 레이아웃을 만들거나 합니다.
하지만, 이것을 iPad로 동작시키면, 세로도 옆에서도 공통 레이아웃이 되어 버립니다.
Size Class에서는 iPad의 세로와 가로 레이아웃을 나누는 설정은 없는 것 같습니다.
iPhone과 iPad에서 똑같이 종횡으로 레이아웃을 나누고 싶은 경우, 이것으로는 조금 불편합니다.

이 문제를 해결하려면 다음 단계를 수행하면 잘 보입니다.
1. 레이아웃을 나누고 싶은 ViewController를 적당한 ViewController의 ChildViewController로 합니다.
2. ParentViewController에서 UIViewController#overrideTraitCollectionForChildViewController를 override하고 화면 방향에 따라 UITraitCollection를 반환합니다.
override func overrideTraitCollection(forChildViewController childViewController: UIViewController) -> UITraitCollection? { {
        let any = UITraitCollection(verticalSizeClass: .unspecified)
        let compact = UITraitCollection(verticalSizeClass: .compact)

        // landscape
        if self.view.frame.width > self.view.frame.height {
            return UITraitCollection(traitsFrom: [any, compact])
        }

        // portrait
        return UITraitCollection(traitsFrom: [any, any])
    }

이번, 예로서 이하와 같이 핑크의 뷰를 세로의 때는 좌상, 옆의 때는 우하가 되도록 배치해 보았습니다.

 

그래서, iPad에서 시작하여 종횡 회전시켜 보면

제대로 종횡으로 전환했습니다.

다만, ChildViewController로 하지 않으면 안되는 것이 조금 미묘하네요.
애플적으로는 iPad는 세로와 옆으로 레이아웃을 나누고 싶지 않습니까?

참고

좋은 웹페이지 즐겨찾기