2012-05-03 2 views
2

나는 범용 애플리케이션을 작성 중이다. 결과적으로 필자는 XIB/NIB를 뷰 컨트롤러로 만들지 않고 따로 생성 한 다음 XIB의 클래스 이름을 적절한 뷰 컨트롤러의 클래스 이름으로 설정하여 뷰 컨트롤러에 연결합니다. 파일 소유자의보기를 XIB의보기에 연결). 뷰 컨트롤러가 초기화 될 때 나는 다음과 같이 해당 XIB/NIB (iPhone 또는 iPad)를로드 :이상한 UIView 좌표 문제

SomeViewController *vc = [[SomeViewController alloc] initWithNibName:@"SomeView-iPhone" bundle:nil]; 
[self.navigationController pushViewController:vc animated:YES]; 
[vc release]; 

또한, 아이폰 버전은 하단에 UITabBarController가 상단에 UINavigationController가와 설정입니다. 그것은 다음과 같이 생성됩니다 :

MyAppDelegate *appDelegate = (MyAppDelegate *)[UIApplication sharedApplication].delegate; 
UINavigationController *localNavigationController; 
UITabBarController *tabBarController = [[UITabBarController alloc] init]; 
NSMutableArray *localControllersArray = [[NSMutableArray alloc] init]; 

//setup the first tab 
FirstViewController *vc = [[FirstViewController alloc] initWithNibName:@"FirstView-iPhone" bundle:nil]; 
localNavigationController = [[UINavigationController alloc] initWithRootViewController:vc]; 
[localControllersArray addObject:localNavigationController]; 
[localNavigationController release]; 
[vc release]; 

//setup the second tab 
SecondViewController *vc = [[SecondViewController alloc] initWithNibName:@"SecondView-iPhone" bundle:nil]; 
localNavigationController = [[UINavigationController alloc] initWithRootViewController:vc]; 
[localControllersArray addObject:localNavigationController]; 
[localNavigationController release]; 
[vc release]; 

.... 

//set the controllers onto the tab bar 
tabBarController.viewControllers = localControllersArray; 
[localControllersArray release];  

[appDelegate.window setRootViewController:tabBarController]; 
[tabBarController release]; 

이 모든 것이 완벽하게 작동합니다. iPhone보기는 작동 탭 막대 및 탐색 모음을 사용하여 잘 표시되며 탐색 기능이 잘 작동합니다. 사물이 이상하게 생겨나는 곳입니다 (2 마리의 괴물). IB 내에 위치

- 대부분의 UI 요소 (라벨, 버튼 등) I 코드에있는 UIScrollView을 생성하고 뷰에 추가 - 만약
, 그것은 미세한
I 작성 - 만약 나타 잘 보여 IB의 UIScrollView를 뷰에 배치하면 런타임에 디자인 타임에 IB에 나타나는 런타임에서 93 픽셀만큼 이동합니다.
- IB에서 UIScrollView를 별도의 뷰로 만든 다음 코드에서 메인보기는 93 픽셀만큼 조 변경됩니다. 즉

, 나는이 할 경우 :

다음
[scrollView setFrame:CGRectMake(0,0,320,100)]; 
[self.view addSubview:scrollView]; 

이 코드에서 만든있는 UIScrollView에 대한 0,0에 나타날 것이다, 그러나 (에 0을 표시 것, -93)에서 생성 된 UIScrollView에 대해 (그리고 IBOutlet을 통해 ivar에 링크 됨). 이제는 93 = 44 + 49로 탭 막대와 탐색 모음을 결합한 높이가됩니다. 그것은 분명히 우연이 아닙니다.

그래서 iOS가 IB에서 만든 스크롤보기를 탐색 막대 및 탭 막대의 높이만큼 런타임에 이동합니까 (UILabel 또는 UIButton과 같은 다른 UI 요소는 아닙니까).

편집 : iPhone 전용 앱에서 탭 표시 줄과 탐색 표시 줄을 설정하는 코드를 사용했는데이 문제가 없으므로 초기화에 initWithNibName을 사용하는 것과 관련이 있다고 생각됩니다. 내보기 컨트롤러 또는 XIB 파일을 VC에 수동으로 연결하면 보편적 인 앱과는 다른 것입니다.

+0

가능한 [UIView 크기/위치가 iPhone에서와 같이 iPad에서 작동하지 않음] (http://stackoverflow.com/questions/7981962/uiview-size-position-not-working-on-ipad-as-on- 아이폰) – Caleb

+0

질문은 유사하지 않습니다. 같은 문제, 완전히 다른 두 가지 상황. – Joel

답변

2

해결했습니다. 나는 속임수를 썼는지이 질문/답변을 통해 발견 :이 IB에서 만든 스크롤 뷰는 왼쪽 하단에 자동 크기로 설정 기본적으로 인해 무슨 일이 벌어지고

UIView size/position not working on iPad as on iPhone

. 나는 그것을 좌상단 구석에 묶기 위해 바꿨고, 이제는 모두 잘됐다. 이상한.

+0

문제가 해결 되었다면 답을 해결책으로 표시하십시오 –

+0

2 일 동안 제 답변을 수락 할 수 없습니다 ... – Joel

+0

예, 맞습니다. 나는 그것을 잊었다. –