티스토리 뷰

iOS

[번역] UISplitViewController

경표다 2022. 1. 24. 17:08

원문: https://developer.apple.com/documentation/uikit/uisplitviewcontroller
HIG: https://developer.apple.com/design/human-interface-guidelines/ios/views/split-views/

UISplitViewController

계층 인터페이스를 구현하는 컨테이너 뷰 컨트롤러입니다.

Declaration

@MainActor class UISplitViewController : UIViewController

Overview

SplitViewController는 계층 인터페이스에서 하위 뷰 컨트롤러를 관리하는 컨테이너 뷰 컨트롤러입니다. 이러한 유형의 인터페이스에서는 한 뷰 컨트롤러 드라이브의 변경사항이 다른 뷰 컨트롤러 드라이브의 컨텐츠도 변경됩니다.

Split view 인터페이스는 메모 앱에서 메모들을 보기 위해 폴더 및 메모를 이동하는 것처럼 필터링 가능한 내용을 검색하거나 계층을 탐색하는 데 가장 적합합니다. 메모 앱에서 기본 사이드바에서 폴더를 선택하면 해당 폴더의 메모 목록이 표시되고 목록에서 메모를 선택하면 특정 메모의 내용이 Secondary View에 표시됩니다.

앱의 사용자 인터페이스를 구축할 때 SplitViewController는 일반적으로 앱 window root 뷰 컨트롤러입니다. SplitViewController는 고유한 모양이 없습니다. 대부분의 모양은 하위 뷰 컨트롤러에 의해 정의됩니다.

Note

SplitViewController를 Navigation 스택에 푸시할 수 없습니다. 일부 다른 컨테이너 뷰 컨트롤러에서는 하위 컨테이너로 SplitViewController를 포함할 수 있지만 대부분의 경우 그렇게 하는 것이 권장되지 않습니다. 설계 지침은 iOS Human Interface Guidelines을 참조하세요.

Split View Styles

iOS 14 이상에서 SplitViewController는 column 스타일 레이아웃을 지원합니다. column 스타일 SplitViewController를 사용하면 적절한 styleinit(style:)를 사용하여 두 개 또는 세 개의 column이 있는 인터페이스를 작성할 수 있습니다.

  • UISplitViewController.Style.doubleColumn를 이용해서 2-column 레이아웃의 split view 인터페이스를 만드세요. 이 스타일의 SplitViewController는 primary column과 secondary column에 배치된 두 개의 하위 뷰 컨트롤러를 관리합니다.
  • UISplitViewController.Style.tripleColumn를 이용해서 3-column 레이아웃의 split view 인터페이스를 만드세요. 이 스타일의 SplitViewController는 primary column, supplementary column, secondary column에 배치된 세 개의 하위 뷰 컨트롤러를 관리합니다.

iOS 14 이전의 SplitViewController는 primary 뷰 컨트롤러와 secondary 뷰 컨트롤러를 포함하는 하나의 split view 인터페이스 스타일만 지원했습니다. 이 기존 인터페이스 스타일은 init(style:)가 아닌 다른 접근 방식을 사용하여 작성된 SplitViewController에 적용됩니다. 기존 인터페이스를 사용하는 SplitViewController는 UISplitViewController.style.unspecified 스타일을 가지며 iOS 14 이상에 도입된 column 스타일 API에 응답하지 않습니다.

Child View Controllers

column 스타일 split view 인터페이스에서 setViewController(_:for:)viewController(for:) 메소드를 사용하여 각 column에 대한 뷰 컨트롤러를 설정하고 가져옵니다. SplitViewController는 모든 하위 뷰 컨트롤러를 네비게이션 컨트롤러로 래핑합니다. 네비게이션 컨트롤러가 아닌 하위 뷰 컨트롤러를 set하면 SplitViewController가 해당 뷰 컨트롤러의 내비게이션 컨트롤러를 생성합니다. SplitViewController는 viewController(for:)를 통해 원래의 뷰 컨트롤러를 반환하지만 children 속성은 뷰 컨트롤러를 래핑하는 데 사용되는 네비게이션 컨트롤러를 포함합니다. 뷰 컨트롤러를 특정 열에 할당한 후 show(_:) 또는 hide(_:)를 사용하여 해당 열을 표시하거나 숨길 수 있습니다.

기존의 split view 인터페이스에서는 인터페이스 빌더를 사용하거나 프로그래밍 방식으로 뷰 컨트롤러를 viewControllers 속성에 할당하여 하위 뷰 컨트롤러를 구성할 수 있습니다. primary 뷰 컨트롤러나 secondary 뷰 컨트롤러를 변경해야 하는 경우 show(_:sender:)showDetailViewController(_:sender:) 메서드를 사용하는 것을 권장합니다. viewControllers 속성을 직접 수정하는 대신 이러한 방법을 사용하면 SplitViewController가 현재 display mode 및 size class에 가장 적합한 방식으로 지정된 뷰컨트롤러를 표시할 수 있습니다.

Interface Transitions

SplitViewController는 인터페이스의 특정 변경에 따라 축소 및 확장을 수행합니다. 예를 들어 인터페이스의 size class가 horizontally regularhorizontally compact 간에 전환될 때 혹은 사용자 상호 작용이나 프로그래밍 방식으로 column을 숨기거나 표시할 때 전환이 발생합니다. SplitViewController는 해당 delegate 객체와 함께 축소 및 확장 전환을 수행합니다. delegate는 UISplitViewControllerDelegate 프로토콜을 채택하는 사용자가 제공하는 객체입니다.

column 스타일 split view 인터페이스에서 인터페이스가 축소될 때 primary, supplementary, secondary 뷰컨트롤러가 아닌 또다른 뷰컨트롤러를 표시할 수 있습니다. setViewController(_:for:)를 사용하여 UISplitViewController.Column.compact column에 원하는 뷰컨트롤러를 설정하세요. 축소, 확장 전환을 커스터마이징 하고 싶다면 Column-Style Split Views를 참조하세요. 기존 split view 인터페이스에서 전환을 관리하는 방법에 대한 자세한 내용은 Classic Split Views 참조하세요.

Display Mode

SplitViewController의 현재 display mode는 하위 뷰컨트롤러의 시각적 배열을 나타냅니다. 표시되는 하위 뷰컨트롤러의 수와 각 컨트롤러가 서로 어떻게 배치되는지를 결정합니다. 예를 들어, 하위 뷰컨트롤러를 나란히 표시하거나, 한 번에 하나씩만 보이도록 하거나 혹은 다른 뷰컨트롤러에 의해 하나가 부분적으로 가려지도록 정렬할 수 있습니다.

display mode를 직접적으로 설정하는 것은 아닙니다. 대신, preferredDisplayMode 속성을 사용하여 기본(preferred) display mode를 설정합니다. SplitViewController는 사용자가 지정한 display mode를 준수하기 위해 모든 노력을 기울이지만 공간 제약 조건 때문에 시각적으로 해당 mode를 수용하지 못할 수 있습니다. 예를 들어 SplitViewController는 수평으로 압축된(horizontally compact) 환경에서 하위뷰 컨트롤러를 나란히 표시할 수 없습니다. 가능한 구성은 UISplitViewController.DisplayMode를 참조하세요. (추가 참고: https://developer.apple.com/design/human-interface-guidelines/ios/visual-design/adaptivity-and-layout/#multitasking-size-classes)

기본(preferred) display mode를 설정하면 SplitViewController가 자체 업데이트되고 실제 display mode를 displayMode 속성에 반영합니다. 표시되는(shown) column만 변경하려면 show(_:) 또는 hide(_:)를 사용하십시오. SplitViewController는 원하는 column을 표시하도록 display mode를 업데이트하는 방법을 결정합니다.

Gesture and Button Support

사용자 상호 작용으로 현재 display mode를 변경할 수 있는 몇 가지 방법이 있습니다.

SplitViewController는 사용자가 스와이프를 사용하여 display mode를 변경할 수 있는 내장 gesture recognizer를 설치합니다. 프레젠테이션을 설정하여 이 제스처 인식기를 표시하지 않을 수 있습니다. presentsWithGesture 속성을 false로 설정하여 이 gesture recognizer를 막을(suppress) 수 있습니다. 예를 들어 primary 뷰컨트롤러를 항상 표시하기 위해 이 속성을 false로 설정할 수 있습니다.

presentsWithGesture 속성이 true이면, SplitViewController가 display mode를 변경하기 위한 특별한 bar button item도 표시합니다. SplitViewController는 이 item의 동작, 모양 및 위치를 관리합니다. 이것은 UISplitViewController.SplitBehavior.tile 에서는 사이드바 토글 버튼으로 보여지고, UISplitViewController.SplitBehavior.overlay 그리고 UISplitViewController.SplitBehavior.displace 에서는 back 화살표 버튼으로 나타납니다. 이 버튼을 누르면 현재 display mode 및 split behavior에 따라 새로운 display mode로 전환됩니다.

3-column split view 인터페이스(UISplitViewController.Style.tripleColumn)에서 display mode에 영향을 주는 또다른 속성은 showsSecondaryOnlyButton 입니다. 이 속성이 true이면 SplitViewController display mode를 UISplitViewController로 전환하거나 UISplitViewController에서 전환하기 위한 다른 막대 버튼 항목을 표시합니다.DisplayMode.secondaryOnly. 사용자가 이 버튼을 누르면 디스플레이 모드를 UISplitViewController로 전환하거나 UISViewController로 전환합니다.DisplayMode.secondaryOnly.

SplitViewController는 현재 display mode를 UISplitViewController.DisplayMode.secondaryOnly 로의 토글을 위한 bar button item을 표시합니다. SplitViewController는 이 bar button item의 동작, 모양 및 위치를 관리합니다. 이것은 이중화살표(double-arrow) 아이콘으로 나타납니다. 사용자가 이 버튼을 탭하면 UISplitViewController.DisplayMode.secondaryOnly display mode로 토글합니다.

(공식문서에서 이렇게 했던 말 또 함;)

Split Behavior

SplitViewController의 split behavior는 secondary 뷰컨트롤러가 다른 뷰컨트롤러와 비교하여 표시되는 방식을 제어합니다. 이 behavior를 설정하여 secondary 뷰 컨트롤러가 항상 다른 컨트롤러와 나란히 표시되도록, 혹은 다른 컨트롤러에 의해 부분적으로 가려지도록, 혹은 다른 컨트롤러의 공간을 확보하기 위해 화면 밖으로 이동하도록 할 수 있습니다.

split bahavior를 직접 설정하는 것은 아닙니다. 대신, preferredSplitBehavior 속성을 사용하여 기본(preferred) 속성을 설정합니다. 이 속성의 변경은 다음 레이아웃이 발생한 후에 적용됩니다. SplitViewController는 splitBehavior 속성에 실제 split behavior를 반영합니다. splitBehavior 속성의 값은 SplitViewController의 display mode들의 사용 가능 여부에 영향을 미칩니다. 가능한 구성은 UISplitViewController.SplitBehavior를 참조하세요.

Column Width Customization

기본 기본 ColumnWidthFraction 및 기본 보조 ColumnWidthFraction을 조정하여 분할 뷰 인터페이스의 기본 및 보조 열에 대한 사용자 정의 너비를 지정할 수 있습니다. 이러한 속성에 대한 값을 지정하지 않으면 기본값은 이며, 시스템은 사용 가능한 공간을 기반으로 적절한 동작을 결정합니다.

preferredPrimaryColumnWidthFraction 속성과 preferredSupplementaryColumnWidthFraction 속성을 조정하여 split view 인터페이스의 primary, supplementary column의 사용자 정의 너비 크기를 지정할 수 있습니다. 이 속성들을 따로 지정하지 않으면 automaticDimension이 기본값이며, 시스템이 사용가능한 공간을 기반으로 적절한 behavior를 결정합니다.

Message Forwarding

SplitViewController는 앱의 window와 하위 뷰컨트롤러 사이에 위치합니다. 따라서 하위 뷰컨트롤러에 대한 모든 메시지가 SplitViewController를 통해 전달되어야 합니다. 메시지가 적절하게 전달됩니다. 예를 들어 뷰 appear, disappear 메시지는 해당 하위 보기 컨트롤러가 실제로 화면에 나타날 때만 전송됩니다.

State Preservation

SplitViewController의 restorationIdentifier 속성에 값을 지정하면 유효한 자체 복원 식별자를 가진 하위 뷰컨트롤러가 유지됩니다. 다음 실행 주기 동안 SplitViewController는 보존된 뷰컨트롤러를 이전 상태로 복원합니다. SplitViewController의 하위 뷰컨트롤러는 동일한 복원 식별자를 사용할 수 있습니다. SplitViewController는 각 하위의 복원 경로가 고유하도록 추가 정보를 자동으로 저장합니다.