Ответ 1
Проверьте ответы в этом вопросе:
Не знаю, почему UIView подталкивается примерно на 10 пикселей
У меня возникла странная проблема с добавлением UINavigationController к моему iPhone-приложению. Я добавляю контроллер следующим образом:
myViewController *viewController = [[myViewController alloc] initWithNibName:@"myView" bundle:nil];
myNavigationViewController *navigationController = [[myNavigationViewController alloc] initWithRootViewController:viewController];
UIView *finalView = myeNavigationViewController.view;
[self.view addSubview:finalView];
Кажется, что все работает так, как планировалось, за исключением того, что я получаю странное белое пространство в верхней части моего представления между строкой состояния и строкой заголовка UINavigationController. alt text http://www.andrewskinner.name/problem.png
Я искал в Интернете, но не знаю, что искать. У кого еще возникла эта проблема? Можете ли вы указать мне в сторону какой-то помощи?
Спасибо заранее.
Проверьте ответы в этом вопросе:
Не знаю, почему UIView подталкивается примерно на 10 пикселей
Что делает линия
UIView *finalView = myeNavigationViewController.view;
добавить код? Он избыточен, так как вы можете добавить представление напрямую, не назначая его сначала в UIView - плюс он неверен, поскольку он ссылается на myNavigationController, а не на navigationController.
Я обычно делаю это
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 в идеале должен быть прямым subView UIWindow. Он будет позиционировать и определять размер самостоятельно. Когда вы добавляете UINavigationController в другое настраиваемое представление подзаголовка UIWindow, вам нужно позаботиться о позиции и размере этого настраиваемого представления, принимая во внимание, отображается ли строка состояния в UIWindow.
Мое предложение состоит в том, чтобы сделать пользовательский вид в качестве подкласса UINavigationController:
mySubClass_NavigationController*nav=[[mySubClass_NavigationController alloc] initWithRootViewController:viewController ];
[myUIWindow addSubview:nav.view];
и внутри mySubClass_NavigationController вы можете выполнить все настройки, которые вы сейчас делаете сами (независимо от того, что этот контроллер).
Я слишком долго боролся с этим, используя очень похожий код для op, а также имел белый бар над навигационным контроллером.
Моя проблема возникла при добавлении UINavigationController в виде представления в UITabController. Пространство в моем случае было вызвано частью UINavigationBar UINavigationController с учетом строки состояния, и это фактически перекрывало часть представления, которое я пытался показать в UINavigationController.
Это код, который я получил в loadView в одном из моих контроллеров представления UITabBarController.
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 есть неявное свойство, называемое "Hides Bottom Bar on Push". Просто проверьте это. Он решил проблему для меня.
Возможно, вы каким-то образом получили два UIViews, каждый из которых имеет строку состояния. Проверьте xib.