2

내 프로젝트에 정말 이상한 버그가 있습니다. 내 주요보기로는 UIScrollView이 있습니다. 그 안에는 UIViewController (UITableViewController 아님)이 있으며 UITableView 인스턴스 변수와 일부 기타는 UIButtons입니다. 뷰 컨트롤러의 뷰 프레임을 CGRectMake(0, 64, 320, 388)으로 설정했습니다. 그 위에는 탭 막대가 있는데 (아직 기능이 없습니다). 처음에는 멋지게 보이지만 훌륭하게 보였습니다. 그러나 modalViewController을 다시 표시하면 (즉, UIViewController을 다시로드하면) UIViewController의 화면이 화면 상단에 표시됩니다 (기본값은 CGRectMake(0, 0, 320, 460)로 설정 됨). 내가 wantsFullScreenLayoutNO에 설정 한, 지금 CGRectMake(0, 0, 320, 388)로 설정viewWillAppear와 viewDidAppear 사이에서 UIViewController 자체 크기를 조정 하시겠습니까?

내가 viewWillAppearviewDidAppear 중간 쯤에이 문제를 추적 한 다음 내 정확한 로그는 modalViewController을 닫으면 다음과 같습니다..

2011 ~ 05-06 11 : 08 : 39.974 캠퍼스 [1570 : 207] 프레임이 0.000000, 64.000000, 320.000000, 388.000입니다. 000
2011-05-06 11 (viewWillAppear) : 08 : 40.378 캠퍼스 [1570 : 207] 프레임은 0.000000, 0.000000, 320.000000, 388.000000이다 (viewDidAppear)

볼 수 있듯이, 상기 프레임에 괜찮 인데 viewDidAppear에는 없습니다. - loadView, viewDidLoad, viewWillAppearviewDidAppear에서 원하는 프레임을 설정
:

나는 다음과 같은 일을 해결하려고하는 일을했습니다.
- 내 wantsFullScreenLayoutNO으로 설정하십시오.
- 내 메서드 재정의 내 [super viewWillAppear:][super viewDidAppear:] 호출을 종료했습니다.

어떻게해야합니까?!?!?

+0

누가 모달보기 컨트롤러를 제공합니까? – diatrevolo

+0

자신의 크기를 조절하는 UIViewController – aopsfan

답변

0

내 문제는 iOS 4에서 Apple이 윈도우 당 1 개의보기 컨트롤러 만 지원한다는 것입니다. 그러나 iOS 5와 마찬가지로 Apple은 컨테이너보기 컨트롤러에 대한 지원을 추가했으며 UIViewController에 메소드를 추가했습니다 (예 : addChildViewController:). 컨테이너보기 컨트롤러 알고리즘을 사용하여 내 문제를 해결. 자세한 내용은 UIViewController Class Reference을 방문하십시오.

편집 :

사용자 정의 UIViewController 하위도 같은 역할을 할 수 있습니다 : 클래스 참조 "컨테이너 뷰 컨트롤러"를 검색 너무 게으른 당신의 사람들을 위해, 여기에 클래스 참조의 관련 부분의 요점이다 컨테이너보기 컨트롤러. 컨테이너 뷰 컨트롤러는 자신이 소유하고있는 다른 뷰 컨트롤러 ( 보기 컨트롤러라고도 함)의 내용을 의 내용으로 관리합니다. 하위보기는있는 그대로 또는 컨테이너보기 컨트롤러가 소유 한보기와 ​​함께 과 함께 표시 할 수 있습니다.

컨테이너보기 컨트롤러 하위 클래스는 공개 인터페이스를 선언하여 해당 자식을 연결해야합니다. 이 메소드의 특성은 이며 사용자가 작성중인 컨테이너의의 L에 따라 다 (니다. 컨트롤러가 한 번에 표시 될 때 그 자식이 표시 될 때 그리고 표시 장치 컨트롤러의 뷰 계층 구조에 이 표시되는 위치의 수를 결정해야합니다.보기 컨트롤러 클래스는 자식과 공유되는 관계가있는 경우이를 정의합니다. 컨테이너에 깨끗한 공용 인터페이스를 설정하면 컨테이너가동작을 구현하는 방법에 대한 개인 정보가 너무 많아서 에 액세스하지 않고 자식이 기능을 논리적으로 사용하도록 보장 할 수 있습니다.

컨테이너보기 컨트롤러는 자식의 루트보기를보기 계층에 추가하기 전에 하위보기 컨트롤러 을 자체와 연결해야합니다. 이렇게하면 iOS가 이벤트를 자식보기 컨트롤러에 올바르게 라우팅하고 해당 컨트롤러가 관리하는보기를 허용합니다. 마찬가지로 뷰 계층 구조에서 자식 루트 뷰를 제거한 후에는 자식 뷰 컨트롤러 자체의 연결을 끊어야합니다. 이러한 연결을 설정하거나 해제하려면 컨테이너에서 기본 클래스로 정의 된 특정 메서드를 호출합니다. 이 메소드는 컨테이너 클래스 의 클라이언트에서 호출 할 수 없습니다. 컨테이너의 구현에만 사용되어 예상되는 봉쇄 동작을 제공해야합니다.

+1

어떻게이 문제를 해결할 수 있습니까? 몇 가지 예제를 게시 할 수 있습니까? –

+0

답변 코드 샘플을 제공하십시오! 방대한 UIViewController 클래스 참조에 연결하면 다른 사용자에게 도움이되지 않습니다. –

+0

@TRedman 1 년 전부터 코드가 변경되어 유용한 코드 샘플을 제공 할 수 있다고 생각하지 않습니다. 편집시 클래스 참조의 일부를 인용했습니다. – aopsfan

관련 문제