Вопрос

У меня странная проблема с добавлением 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 появляется странный пробел. альтернативный текст http://www.andrewskinner.name/problem.png

Я искал в Интернете, но не знаю, что искать. У кого-нибудь еще возникла такая проблема? Можете ли вы указать мне направление на помощь?

Заранее спасибо.

Это было полезно?

Решение

Другие советы

Что значит линия

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 должен быть прямым подвидом UIWindow. Он будет позиционировать и размер прямо сам по себе. Когда вы добавляете UINavigationController в другое настраиваемое представление подпредставления UIWindow, вам необходимо позаботиться о положении и размере этого настраиваемого представления, учитывая, отображается ли строка состояния в окне UIWindow.

Я предлагаю сделать пользовательский вид подклассом UINavigationController:

mySubClass_NavigationController*nav=[[mySubClass_NavigationController alloc] initWithRootViewController:viewController ];

[myUIWindow addSubview:nav.view];

и внутри mySubClass_NavigationController вы можете выполнить всю настройку, которую вы делаете сейчас в себе (независимо от того, что это за контроллер).

Я тоже некоторое время боролся с этим, используя очень похожий код с операциями, а также над белой панелью навигации был белый столбик.

Моя проблема возникла при добавлении 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 есть скрытое свойство, называемое "Скрывает нижнюю панель при нажатии". Просто проверь это. Это решило проблему для меня.

Может быть, вы как-то получили два UIViews, каждый со строкой состояния. Проверьте XIB.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top