내 iPhone 응용 프로그램이 회전 할 때 이상한 동작을 보이고 있습니다. 탐색 제목과 내용보기 사이에 탭 막대보기 (아래에서 재현하는 방법에 대한 자세한 내용)가 나타납니다. 동일한 문제를 보여주는 작은 테스트 케이스를 만들었습니다 : 사용자 지정 루트 UIViewController는 UITabBarController를 프로그래밍 방식으로 만들고 표시합니다. 프로그래밍 방식으로 두 개의 탭이 있습니다 : 1) 일반 UIViewController 및 2) UINavigationController는 프로그래밍 방식으로 단일 일반 UIViewController 콘텐츠 뷰로 만들어졌습니다. .회전 및 탭 전환 후 내비게이션 막대와보기 사이에 틈이 생깁니다.
응용 프로그램의 전체 코드는 루트 컨트롤러의 viewDidLoad에 있습니다 (모든 "* VC"클래스는 Xcode에서 사용자 인터페이스를위한 XIB로 완전히 바닐라 UIViewController 하위 클래스이며보기 배경색 만 변경되어 각보기를 명확하게 식별합니다. 아무것도).
- (void)viewDidLoad {
[super viewDidLoad];
FirstVC *fvc = [[FirstVC alloc] initWithNibName:@"FirstVC" bundle:nil];
NavContentsVC *ncvc = [[NavContentsVC alloc] initWithNibName:@"NavContentsVC" bundle:nil];
UINavigationController *svc = [[UINavigationController alloc] initWithRootViewController:ncvc];
NSMutableArray *localControllersArray = [[NSMutableArray alloc] initWithCapacity:2];
[localControllersArray addObject:fvc];
[localControllersArray addObject:svc];
fvc.title = @"FirstVC-Title";
ncvc.title = @"NavContents-Title";
UITabBarController *tbc = [[UITabBarController alloc] init];
tbc.view.frame = CGRectMake(0, 0, 320, 460);
[tbc setViewControllers:localControllersArray];
[self.view addSubview:tbc.view];
[localControllersArray release];
[ncvc release];
[svc release];
[fvc release];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return YES;
}
다음
문제를 재현하는 방법은 다음과 같습니다 : 여기
가있는 viewDidLoad 코드 및 shouldAutorotateToInterfaceOrientation 코드입니다,이 코드는 기본적으로 전체 응용 프로그램입니다1) 시작 응용 프로그램은
2) (UITabBar가 올바르게 회전 함)
3) 탭 2를 클릭하십시오.
4) 장치를 세로 방향으로 회전합니다. 탐색 제목 표시 줄과 탐색 내용보기 아래에있는 루트보기 컨트롤러의 배경색이 약 10 픽셀 높습니다.
5) 탭 1
6)을 클릭 탭 2
와의 격차를 클릭 사라 졌어요! 내 실제 응용 프로그램에서 NavigationController 탭이 활성화되어있는 동안 모든 VC 푸시 및 팝 중에 간격이 유지되는 것을 볼 수 있습니다. 다른 탭으로 이동 한 다음 탐색 탭으로 돌아가서 간격을 정리합니다.
내가 뭘 잘못하고 있니? SDK 3.1.3에서 실행 중이며 시뮬레이터와 장치에서 모두 발생합니다. 이 특정 시퀀스를 제외하고 모든 것이 잘 작동하는 것 같습니다. 도움!
어느 쪽이든, 또는 문제가 UITabBarController가이 아니라고 루트 컨트롤러 자체. 나는 "커스텀"루트 뷰 컨트롤러를 사용하는 로테이션에 많은 문제를 겪었다. 이후 그 일을 중단하고 UITabBarController 또는 UINavigationController를 내 응용 프로그램의 주 루트 컨트롤러로 사용하고 "특수"시작 화면을 애니메이션없이 "즉시"팝업하는 모달 VC로 구현했습니다. 애니메이션으로 해산. – Bogatyr