아이패드에만 있던 UI인 UISplitViewController가 iOS8와 같이 등장한 5.5인치 iPhone 6 plus기기로 인해 iPhone에도 UISplitViewController가 지원하게 되었습니다.

아이폰에서 확인하게 되면 아래와 같이 나타나게 됩니다. 적용된 앱들 중에 하나가 메일 앱이죠.

Mail App

iPhone 6 Plus, 6S Plus 기기의 가로모드에서 앱을 실행하면 위의 그림처럼 표현됩니다. 왼쪽의 화면이 MasterViewController로 부르며, 오른쪽은 DetailViewController라고 부릅니다. (서로의 관계: Master-Detail)

일반적으로 MasterViewController를 사용한 앱을 실행 시, DetailViewController가 자동으로 Push(?)되어 화면에 나타납니다. 따라서 화면에 표현할 데이터들을 미리 지정해줘야 하며, Mail.app에서는 메일 계정리스트(메일 리스트) 중 첫 번째를 선택하여 보여줍니다.

가로모드로 앱이 실행되면, 좌, 우가 모두 보이기 때문에 UX적으로 큰 문제가 없지만… 세로모드에서 실행될 경우엔, DetailViewController가 자동으로 보이게 되어 (보통은 첫 번째의) 상세 내용을 확인하게 끔됩니다. 세로모드에서는 일반적인 UINavigationViewController의 효과를 주는 것이 좋은 것 같습니다.(UX적으로…?)

그렇기 위해서는 DetailViewController를 Push하지 않아야 하는데요. 아래와 같이 프로토콜을 구현하면 되겠습니다.

UISplitViewControllerDelegate의 구현클래스에 func splitViewController(splitViewController, collapseSecondaryViewController secondaryViewController, ontoPrimaryViewController primaryViewController) -> Bool {}를 추가 구현합니다.

반환 값을 false로 지정하면 됩니다.

func splitViewController(splitViewController: UISplitViewController  
  collapseSecondaryViewController secondaryViewController: UIViewController,
  ontoPrimaryViewController primaryViewController: UIViewController) -> Bool {
        return true
    }

구현한 클래스를 Storyboard에서 지정하여 delegate를 지정해줍니다.

이렇게 첫 시작 화면이 MasterViewController가 되었습니다.