2014-09-16 1 views
4

xcode6/iOS8로 컴파일되도록 앱을 업데이트하고 있습니다.iOS8 - 모달보기를 제공하면 하위보기가 제거됩니다.

모달 뷰를 표시 할 때 한 가지 문제가 있습니다. 기본 하위 뷰는 제거됩니다. 모달보기가 닫힐 때까지 완전히 검은 색으로 표시됩니다. 그런 다음 다시 나타납니다.

iOS8을 사용하는 사람이 있습니까? 동일한 코드가 iOS4 이후에 작동했습니다.

코드 :

PigDetailViewController *pigDetailViewController = [[PigDetailViewController alloc] initWithNibName:@"PigDetailViewController" bundle:nil]; 

    self.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext; 
    self.navigationController.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 


    [self presentViewController:pigDetailViewController animated:YES completion:nil]; 

답변

3

iOS 8에서는 설명한 상황에서 UIModalPresentationCurrentContext처럼 작동하는 새로운 프리젠 테이션 스타일을 추가했습니다. UIModalPresentationOverCurrentContext입니다. 당신이 가능성을 확인해야합니다 아래 아이폰 OS 7을 지원하고 해당

PigDetailViewController *pigDetailViewController = [[PigDetailViewController alloc] initWithNibName:@"PigDetailViewController" bundle:nil]; 
pigDetailViewController.modalPresentationStyle = UIModalPresentationOverCurrentContext; 
self.navigationController.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 
[self presentViewController:pigDetailViewController animated:YES completion:nil]; 

참고 : 여기 캐치 UIModalPresentationCurrentContext와 함께, 당신은 뷰 컨트롤러를 설정하려는 달리,이 프리젠 테이션 스타일되게과 같이 될 것입니다 OS 버전을 확인하고이를 기반으로보기 컨트롤러를 표시하는 방법을 결정하십시오.

편집 : 여기에 한 가지 더 메모를 보내고 싶습니다. UIModalPresentationCurrentContext가있는 iOS7에서, 제시된 VC가 닫히면, 기본 VC는 viewDidAppear 메소드가 호출됩니다. iOS8에서 UIModalPresentationOverCurrentContext를 사용하여, 기본 VC가 그 위에 표시된 VC가 해제 될 때 호출되는 viewDidAppear 메서드가 없다는 것을 발견했습니다.

+1

정답입니다. –

+0

로저 (Roger)와 동의합니다.이 답변은 정답이며 이와 같이 표시해야합니다. – EmphaticArmPump

+0

어떤 아이디어로도 기본 VC viewDidAppear을 호출 할 수 있습니까? –

-1

난 당신이 어떻게 모달 뷰 컨트롤러에게 작품을 오해 생각합니다.

보기 컨트롤러를 모달로 표시하면 전체 화면을 제어합니다. 그것은 불투명 한 배경 (일반적으로 검은 색)을 가지고 있으며 그 위에 그 견해를 그립니다.

예를 들어 view.backgroundColor을 노란색으로 설정하면 노란색 배경이됩니다. 선택을 취소하면 검은 색 배경으로 표시됩니다.

다른보기가 "보여주기"때문에 모달보기가 그 위에 놓여있는 것처럼 보입니다.

나는이이 방법을 사용하는 일을 발견하는 가장 좋은 방법 ...

// in the view controller that is presenting the modal VC 
modalVC = // the modal VC that you will be presenting 

UIView *snapshotView = [self.view snapshotViewAfterScreenUpdates:NO]; 
[modalVC.view insertSubView:snapshotView atIndex:0]; 

// present the modal VC 

이 현재 뷰 계층의 "스크린 샷"을 수행 한 후 모달의 모든 아래에 해당 스냅 샷을 배치합니다 VC.

그러면 검은 색 화면이 이전보기 컨트롤러의 스크린 샷으로 바뀝니다.

+0

감사합니다. 이것이 2 년 넘게 잘 돌아간 나의 관심사 ID입니다. iOS8만으로도 이런 일이 일어나기 시작했습니다. 내 모달보기가 기본보기보다 작습니다. 과거에는 기본보기가 계속 표시되었습니다 (모달로 표시된보기 양쪽에 표시됨). – mtb

+1

iOS 7부터는 사용자 정의 transitioningDelegate와 함께 'UIModalPresentationCustom'을 사용하여 제공된 ViewViewController를 사용자 정의 모달로 삽입 할 수 있습니다 ... iOS 8에서는 한 단계 더 나아가 사용자 정의'UIPresentationController'를 사용하여 모든 "액세서리보기"(즉,전자 조감도보기) 또한 – liamnichols

+0

@ Fogmeister 나는 mtg가이 방법을 설명하는 것과 똑같다고 생각합니다. 나는 같은 문제를 가지고 있고 Reaveal로 점검했다. 실제로 기본 뷰 계층은 제거됩니다. – brainray

0

BrennanR의 대답에 요점을 추가하면 ... 심지어 viewWillAppear는 그 위에 오버레이 된 VC가 해제 될 때 호출하지 않습니다.