iPhone: странное место на вершине UINavigationController - PullRequest
13 голосов
/ 25 июня 2009

У меня странная проблема с добавлением 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

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

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

Ответы [ 6 ]

11 голосов
/ 30 июня 2009

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

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]];

Установка рамки на границы также удаляет пустое пространство сверху, о котором вы спрашивали.

9 голосов
/ 30 июня 2009

Ознакомьтесь с ответами на этот вопрос:

Не знаю, почему UIView увеличивается примерно на 10px

2 голосов
/ 30 ноября 2010

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

Моя проблема возникла при добавлении 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.

2 голосов
/ 30 апреля 2010

Проблема в том, что в идеале UINavigationController должен быть прямым подвидом UIWindow. Он будет позиционировать и размер прямо сам по себе. Когда вы добавляете UINavigationController в другое настраиваемое представление подпредставления UIWindow, вам необходимо позаботиться о положении и размере этого настраиваемого представления, учитывая, отображается ли строка состояния в окне UIWindow.

Мое предложение состоит в том, чтобы сделать пользовательское представление подклассом UINavigationController:

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

[myUIWindow addSubview:nav.view];

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

1 голос
/ 09 мая 2012

В IB есть скрытое свойство, называемое "Hides Bottom Bar on Push". Просто проверь это. Это решило проблему для меня.

0 голосов
/ 25 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...