2012-09-21 4 views
13

내 앱을 계속해서 마이그레이션하고 있습니다. UIPickerView을 사용합니다. viewDidLoad 메서드에서 나는 picker를 만들고 그것의 y 원점을 self.view.frame.size.height으로 설정하여 화면을 끕니다. 그런 다음 필요할 때마다 옮깁니다.iPhone5에서 UIView 높이가 올바르지 않습니다.

iPhone 5 self.view.frame.size.height은 여전히 ​​480을 반환하지만 아직 UIView은 화면을 올바르게 채 웁니다.

심지어 나는 CGRectGetHeight(self.view.bounds)을 사용하여 뭔가 다른 것을 되돌릴 수 있다고 생각했습니다 ... 주사위가 없습니다. 왜 이런 일이 일어날 지에 대한 아이디어.

+2

이 프로젝트에 640x1136 픽셀 [email protected] 파일을 추가합니다. 이 기능이 없으면 앱이 새로운 기기로 완전히 늘어나지 않습니다. 자세한 정보 [여기] (http://stackoverflow.com/a/12397309/877465). –

+0

다른보기가 전체 화면으로 표시합니까? 목표에 iPhone 5 스크린 샷을 추가하는 것을 기억 했습니까? –

+0

예 새 기본 이미지가 있습니다. 나는 그 문제를 발견했다. 내 펜촉은 "iPhone 5 전체 화면"으로 설정해야합니다. NIB에서보기 크기를로드하고 autoResizeMask를 고려하지 않은 것 같습니다. – random

답변

22

보기의 펜촉에서 선택한 크기가 viewWillAppear: (BOOL) animated 메쏘드까지 사용되기 때문입니다. 그런 다음 올바른 크기가됩니다.

당신이 viewDidLoad 때문에 정확한 크기로 다음과 같은 코드를 사용할 수 있습니다 그러나

가 호출됩니다 :

CGSize viewSize = [[UIScreen mainScreen] bounds].size; 
viewSize = CGSizeMake(viewSize.width, viewSize.height - STATUS_BAR_HEIGHT); 

STATUS_BAR_HEIGHT는 20이지만 앱에 따라 달라집니다. 해당 행을 추가해야 할 수도 있고하지 않을 수도 있습니다.

EDIT

mainScreen 경계 사용의 문제점은 프레임 방향의 변화에 ​​따라 변경되지 않는다는 것이다. 그것은 그것이 설계된 방식입니다. 다음에 그것을 해결할 수 :

CGSize viewSize = [[UIScreen mainScreen] bounds].size; 

    if(UIInterfaceOrientationIsLandscape(CURRENT_ORIENTATION)){ 
     viewSize = CGSizeMake(viewSize.height, viewSize.width - STATUS_BAR_HEIGHT); 

    } else { 
     viewSize = CGSizeMake(viewSize.width, viewSize.height - STATUS_BAR_HEIGHT); 
    } 

CURRENT_ORIENTATION[[UIApplication sharedApplication] statusBarOrientation];

1

문제점을 발견했습니다. 내 펜촉은 "iPhone 5 전체 화면"으로 설정해야합니다. NIB에서보기 크기를로드하고 autoResizeMask를 고려하지 않은 것 같습니다.

IB의보기 크기가 "크기 : 없음"으로 설정된 경우보기의 크기가 올바르지 않습니다. 그것은 "Size : Retina 4 Full Screen"으로 설정되어야합니다. 이상한.

+0

하지만 당신이 그렇게하고 아이폰 4 말할 수있는 귀하의 애플 리케이션을 실행하면 잘못된보기 높이를 얻을 것이다 원인 아이폰 5보기의 높이 얻을. – bllubbor

+0

당신의 권리 :(아스파탐의 대답은 정확했습니다.) – random

18

저는 같은 문제를 다루었습니다. - (void)viewDidLoad에서 뷰 프레임을 얻으려고했으나 - (void)viewWillAppear:(BOOL)animated이 호출 될 때까지 업데이트되지 않았습니다.

따라서보기 프레임을 - (void)viewWillAppear:(BOOL)animated으로 가져 오면 문제가 없습니다.

+2

그러나 이것은보기가 바뀔 때마다 계속 변경하고 싶지 않습니다. 일단보기가로드되면 변경해야합니다. –

+0

@ JoeD'Andrea 동일한 문제가 있습니다. 가장 빠른 해결 방법은 isWithAppear 메서드에서 사용하는 isFirstLoad 플래그를 추가하는 것입니다 (다른 방법, p'raps?). – htafoya

+0

@ JoeD'Andrea에서도 [[UIScreen mainScreen] bounds] .size를 사용할 수 있습니다. – htafoya

관련 문제