У меня есть приложение для iPhone с a UITableView
меню. Когда строка в таблице выбрана, соответствующий контроллер представления продвинут на приложение UINavigationController
стек.
Моя проблема то, что MenuViewController
не нуждается в панели инструментов, но UIViewControllers
которые продвинуты на стек, делают. Каждый UIViewController
это получает продвинутые вызовы setToolbarHidden:animated:
в viewDidAppear:
. Для сокрытия панели инструментов я звоню setToolbarHidden:animated:
в viewWillDisappear:
.
Показывая работы панели инструментов, такие, что, когда продвинутое представление появляется, слайды панели инструментов и представление изменяет размер правильно. Однако, когда кнопка "Назад" нажимается, панель инструментов скатывается, но представление не изменяет размер. Это означает, что существует черная полоса вдоль нижней части представления как другие переходы представления в. Я попытался добавить высоту панели инструментов к высоте представления до сокрытия панели инструментов, но это заставляет представление быть анимированным во время перехода так, чтобы была все еще черная полоса.
Я понимаю, что могу управлять своим собственным UIToolbar, но я хотел бы использовать UINavigationControllers
созданный в UIToolbar для удобства.
Это сообщение форума упоминает ту же проблему, но никакое обходное решение не упоминается.
Это просто безумный удар в темноте, но, возможно, вам стоит запустить цикл выполнения один раз после того, как скрыть панель инструментов:
[viewController setToolbarHidden:YES animated:YES];
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.0]];
Я тоже столкнулся с этой проблемой. В моем случае единственный способ успешно скрыть панель инструментов без отображения фона окна - это вызвать [self.navigationController setToolbarHidden: YES animated: animated]
в -viewDidAppear вашего контроллера представления. :
метод.
У меня была та же проблема, и вот решение, которое сработало для меня. Предположим, вы передаете SomeUIViewController
в стек навигации.
Определите этот (частный) ivar в интерфейсе SomeUIViewController
:
// keep a reference to the navigation controller for use in viewDidDisappear:(BOOL)animated method
UINavigationController * _navigationController;
Реализуйте следующие методы SomeUIViewController
:
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
// here, your controller still has a reference to self.navigationController
_navigationController = [self.navigationController retain];
}
- (void)viewDidDisappear:(BOOL)animated {
// at this point, self.navigationController = 0x0, so
// use your retained reference to the navigation controller to perform any last minute operations, then release
[_navigationController setToolbarHidden:YES];
[_navigationController release];
[super viewDidDisappear:animated];
}
Идея состоит в том, что вы хотите скрыть панель инструментов, принадлежащую контроллеру навигации после Вид SomeUIViewController
исчез. Таким образом, вы избежите нежелательных артефактов отображения.
ОТКАЗ от ответственности
Это просто ответ, который показывает обходное решение для заявленного вопроса. Он предназначен исключительно для того, чтобы указать на деталь внутренней работы фреймворка. Это также подразумевается как пример того, что не отправлять в Apple AppStore.