오,이게 며칠 동안 두통을 일으켜서 어떻게해야할지 모르겠습니다. 최악의 부분은 master-detail 템플릿으로 새로운 Xcode iOS 프로젝트를 만드는 것이 잘 작동한다는 것입니다. 다행히도 그 작은 사실은 내가 해결책을 찾은 방법이었습니다.
해결책이에 새로운 primaryViewControllerForCollapsingSplitViewController:
메소드 를 구현하는 것임을 제안하는 게시물이 있습니다 UISplitViewControllerDelegate
. 나는 아무 소용이 없었습니다. Apple이 마스터-디테일 템플릿에서 작동하는 것처럼 보이는 것은 새로운 (심지어 숨을 쉬어) splitViewController:collapseSecondaryViewController:ontoPrimaryViewController:
델리게이트 메소드 (다시 UISplitViewControllerDelegate
)를 구현하는 것입니다. docs 에 따르면 이 방법은 다음과 같습니다.
대리인에게 기본 뷰 컨트롤러를 조정하고 보조 뷰 컨트롤러를 축소 된 인터페이스에 통합하도록 요청합니다.
자세한 내용은 해당 방법의 토론 부분을 읽어보십시오.
Apple이 처리하는 방식은 다음과 같습니다.
- (BOOL)splitViewController:(UISplitViewController *)splitViewController
collapseSecondaryViewController:(UIViewController *)secondaryViewController
ontoPrimaryViewController:(UIViewController *)primaryViewController {
if ([secondaryViewController isKindOfClass:[UINavigationController class]]
&& [[(UINavigationController *)secondaryViewController topViewController] isKindOfClass:[DetailViewController class]]
&& ([(DetailViewController *)[(UINavigationController *)secondaryViewController topViewController] detailItem] == nil)) {
// Return YES to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded.
return YES;
} else {
return NO;
}
}
이 구현은 기본적으로 다음을 수행합니다.
- 경우
secondaryViewController
우리는 (A를 기대하고 무엇 UINavigationController
(A), 그리고 우리가 기대하는지 보여주는 것 DetailViewController
- 뷰 컨트롤러), 그러나 (어떤 모델이 없습니다 detailItem
"다음) Return YES to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded.
"
- 그렇지 않으면 "
NO
분할보기 컨트롤러가 보조보기 컨트롤러의 내용을 축소 된 인터페이스에 통합하도록하려면"
결과는 세로로 iPhone에 대해 다음과 같습니다 (세로로 시작하거나 세로로 회전 또는보다 컴팩트 한 크기의 클래스).
- 보기가 올바른 경우
- 모델이 있으며, 상세 뷰 컨트롤러를 보여줍니다
- 모델이 없지만 마스터 뷰 컨트롤러를 표시
- 보기가 정확하지 않은 경우
진흙처럼 맑아
UISplitViewController
하고 항상YES
그 메소드에서 돌아온 다음 스토리 보드에서 분할보기 클래스를 변경했습니다. 항상 iPhone의 마스터를 세로로 표시하고 싶습니다. :)