Я использую UINavigationBar в своем приложении с тремя различными UIViewControllers.RootViewController скрывает панель навигации, когда ее представление находится на вершине стека, реализуя в RootViewController.m следующее:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:TRUE animated:TRUE];}
и
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.navigationController setNavigationBarHidden:FALSE animated:TRUE];}
Когда firstViewController помещается наверх, все работает просто отлично.В IB я сказал, что у него есть строка состояния и панель навигации.Все его подпредставления (добавленные в IB) выложены так, как и ожидалось, на симуляторе и на устройстве.
Однако, когда secondViewContoller выдвинут наверх, все становится странным.В IB я сказал, что есть строка состояния и панель навигации, как и раньше.Я добавил UIWebView, чтобы заполнить оставшуюся часть экрана (проверенные размеры 320 x 416 в IB), и в IB все выглядит правильно.Я запустил приложение на симуляторе и на моем устройстве, и UIWebView работает за панелью навигации, как если бы оно было 320 x 460.
Чтобы исправить эту проблему, я добавил этот код в SecondViewController.m:
- (void)viewDidLoad {
[super viewDidLoad];
[webView setFrame:CGRectMake(0.0, 44.0, 320.0, 372.0)]; }
А теперь все выглядит нормально при работе на симуляторе и устройстве.Но это не правильно!Высота на самом деле 416, а не 372. Почему мне пришлось дважды вычесть высоту UINavigationBar?Мой хак работает, но я думаю, что есть кое-что важное, что я здесь упускаю, что мне действительно нужно понять.Любые идеи с благодарностью.