iPhone : UinavationController 상단의 이상한 공간
-
22-07-2019 - |
문제
iPhone 응용 프로그램에 UinavigationController를 추가하는 데 이상한 문제가 있습니다. 다음과 같이 컨트롤러를 추가합니다.
myViewController *viewController = [[myViewController alloc] initWithNibName:@"myView" bundle:nil];
myNavigationViewController *navigationController = [[myNavigationViewController alloc] initWithRootViewController:viewController];
UIView *finalView = myeNavigationViewController.view;
[self.view addSubview:finalView];
상태 표시 줄과 UinavationController 제목 표시 줄 사이의 내 견해 상단에 이상한 공백을 얻는 것을 제외하고는 모두 계획대로 작동하는 것 같습니다.Alt Text http://www.andrewskinner.name/problem.png
온라인으로 검색했지만 실제로 검색해야 할 사항을 모릅니다. 다른 사람 이이 문제가 있습니까? 도움의 방향으로 나를 지적 할 수 있습니까?
미리 감사드립니다.
해결책
이 질문의 답변을 확인하십시오.
다른 팁
라인은 무엇을합니까
UIView *finalView = myeNavigationViewController.view;
코드에 추가 하시겠습니까? UIView에 먼저 할당하지 않고 직접 뷰를 추가 할 수 있으므로 중복됩니다. 또한 NavigationController가 아닌 MyNavigationController를 참조 할 때 잘못되었습니다.
나는 이것을하는 경향이있다
myViewController *viewController = [[myViewController alloc] initWithNibName:@"myView" bundle:nil];
myNavigationViewController *navigationController = [[myNavigationViewController alloc] initWithRootViewController:viewController];
[navigationController.view setFrame: [self.view bounds]];
navigationController.delegate = self;
[self.view addSubview:[navigationController view]];
프레임을 경계로 설정하면 요청한 상단의 공백이 제거됩니다.
문제는 UinavigationController가 이상적으로 UIWindow의 직접적인 하위 뷰 여야한다는 것입니다. 그것은 그 자체로 바로 위치와 크기를 할 것입니다. UIwindow 하위 뷰의 다른 사용자 정의보기에 UinavigationController를 추가하면 상태 표시 줄에 표시되는지 여부를 고려 하여이 사용자 지정보기의 위치와 크기를 처리해야합니다.
내 제안은 UinavigationController의 서브 클래스로 사용자 정의보기를 만드는 것입니다.
mySubClass_NavigationController*nav=[[mySubClass_NavigationController alloc] initWithRootViewController:viewController ];
[myUIWindow addSubview:nav.view];
그리고 mysubclass_navigationcontroller 내부에서, 당신은 당신이 지금하고있는 모든 사용자 정의를 (컨트롤러가 무엇이든) 수행 할 수 있습니다.
나는 OP와 매우 유사한 코드를 사용하여 한동안이 문제로 어려움을 겪었고 내비게이션 컨트롤러 위에 흰색 막대가있었습니다.
UITABController의 뷰로 UinaVigationController를 추가 할 때 내 문제가 발생했습니다. 내 경우의 공간은 상태 표시 줄을 고려하여 UinavigationController의 UinavigationBar 부분에 의해 발생했으며 실제로 UinaVigationController에서 보여 주려고했던 견해의 일부를 겹치고있었습니다.
이것은 UitabbarController View Controllers 중 하나에서 LoadView에서 끝난 코드입니다.
SomeUITableViewController *screenList = [[SomeUITableViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc]
initWithRootViewController:screenList];
CGRect frame = [[navController navigationBar] frame];
frame.origin.y = 0; // Was 20, set to 0 to not take into account the status bar.
[[navController navigationBar] setFrame:frame];
[self setView:[navController view]];
더 많은 정보가 있습니다 http://discussions.apple.com/message.jspa?messageid=7890362.
IB에는 "푸시의 바닥 막대"라고 불리는 모호한 속성이 있습니다. 그냥 확인하십시오. 그것은 나에게 문제를 해결했다.
어쩌면 당신은 어떻게 든 각각 상태 표시 줄이있는 두 개의 uiviews를 얻었을 것입니다. XIB를 확인하십시오.