2011-03-03 2 views
18

iPad 앱에서 splitView를 사용하고 있습니다. 디테일 뷰에는 etail 뷰 경계에 따라 그려지는 2 개의 서브 뷰가 있습니다. 문제는 ipad가 가로 모드 인 경우에도 항상 (1024, 768)로 그려지는 것입니다.SplitView 상세 뷰가 잘못된 뷰 프레임을 반환합니까?

BTW - 내가 세로 모드에서 전화를 걸면 ipad를 회전하여 (706,768)로 확대합니다.

는 생성으로 내가 (뷰했던 부하 방법) 상세 뷰 프레임과 경계를 확인하고 두 경우 모두 내가이 얻을

: 디버그 창에서

NSLog(@"screen frame = %@",NSStringFromCGRect(self.view.frame)); 
NSLog(@"screen bounds = %@",NSStringFromCGRect(self.view.bounds)); 

내가 얻을 :

2011-03-03 10:58:19.376 English Club[63347:207] screen frame = {{0, 0}, {768, 1024}} 
2011-03-03 10:58:19.382 English Club[63347:207] screen bounds = {{0, 0}, {768, 1024}} 

어디에 문제가 있는지 알 수 없습니다. 누구든지 나를 도울 수 있습니까?

도움 주셔서 감사합니다.

+0

나는이 이상한 문제에 주목했습니다. 나는 애플과 함께 버그 리포트를 제출할 것을 권한다 - 그것이 내가 한 일이다. http://bugreporter.apple.com – Jasarien

+2

Apple은이 버그 신고에 대한 답변을 제공 했습니까? Btw, 메인 뷰에 하위 뷰를 어떻게 추가하고 있습니까? 자동 크기 조정 속성을 올바르게 설정하고 있습니까? 문제를 더 깊이 이해할 수있는 코드를 더 많이 표시 할 수 있습니까? 고마워요. – marzapower

+0

그럼, 여기서 뭘하고 싶니? 자세히보기의보기 크기를 설정 하시겠습니까? 또는 상세 뷰 내부의 뷰. 뷰의 기본 크기는 splitviewcontroller에 따라 표준으로 유지되므로 상세 뷰 내부의 뷰 프레임 크기는 설정할 수 있지만 상세 뷰의 크기는 설정할 수 없습니다. 다른 질문이 있으면 알려주십시오. – AppAspect

답변

6

viewDidLoad에서보기는 실제 크기가 아니어야합니다. 그것은 나중에 레이아웃 방법으로 설정됩니다. 그러나 그것은 당신을 멈추지 않아야합니다 :) 어떻게 자동 크기 조절 마스크를 설정합니까? 올바르게 설정했다면 모든 것이 정상입니다.

+0

감사합니다. 다시 확인해 보겠습니다. – shannoga

1

예는 확인을해야 자동 크기 속성 ... 당신은

self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; 

환호 펜촉을 통해 또는 코드를 설정할 수 있습니다

...

+0

감사합니다. – shannoga

2

내가 현재 쓰고을 설정 한 경우 UISplitViewController 응용 프로그램을 사용하고 세부 정보 또는 마스터보기의 크기 변경을 알면 실망했습니다. 서브 프레임의 크기를 전적으로 담당합니다.

UINavigationController 및 UITabBarController와 마찬가지로 UISplitViewController는 '컨테이너'보기 컨트롤러이며 목적에 맞게 하위보기를 만듭니다.

함수 self debugDumpTheFrames는 uisplitviewcontroller의 프레임을 인쇄하고 두 개의 서브 프레임입니다. 나는 (이 기간 동안 내가 아무 것도 안 함)을 splitViewController의 viewDidLoad에있는 프레임을 인쇄, 2 초 후에이 함수를 두 번째로 호출 할 타이머를 설정 : 우리는 출력을 보면

[self debugDumpTheFrames]; 
NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:2.0f target:self selector:@selector(debugDumpTheFrames) userInfo:nil repeats:NO]; 

은, 우리가 볼 수 있습니다 언젠가는 viewdidload 다음에 UISplitViewController가 서브 뷰의 프레임을 변경했습니다.

size of splitviewcontrollers view frame {{0, 0}, {748, 1024}} 
size of splitviewcontrollers detail view frame {{0, 0}, {768, 1024}} 
size of splitviewcontrollers master view frame {{0, 0}, {768, 1024}} 

size of splitviewcontrollers view frame {{0, 0}, {748, 1024}} 
size of splitviewcontrollers detail view frame {{321, 0}, {703, 748}} 
size of splitviewcontrollers master view frame {{0, 0}, {320, 748}} 

정확한 크기 조정은 어디에서 할 수 있습니까? 그러나 uisplitviewcontroller는 프레임의 사장이며 사적인 속성이므로이를 만지면 저장소에서 거부 될 수 있습니다.

3

viewDillLoad 대신 viewWillAppear에서 작업을 수행하십시오.

4

당신이 기다리면 - (무효) viewDidLayoutSubviews 당신이 정말로있는 viewDidLoad에서 올바른 폭을 취득해야하는 경우, 당신은 분할 뷰 컨트롤러에 액세스하고의 폭을 얻을 수

0

는 적당한 크기를해야합니다 자세히보기 컨트롤러.

예. 스위프트에서 :

func getDetailViewSize() -> CGSize { 
    var detailViewController: UIViewController 
    if (self.splitViewController?.viewControllers.count > 1) { 
     detailViewController = self.splitViewController?.viewControllers[1] as! UIViewController 
    } else { 
     detailViewController = self.splitViewController?.viewControllers[0] as! UIViewController 
    } 
    return detailViewController.view.frame.size 
}