Сокрытие UIToolbar UINavigationController во время viewWillDisappear:

У меня есть приложение для iPhone с a UITableView меню. Когда строка в таблице выбрана, соответствующий контроллер представления продвинут на приложение UINavigationController стек.

Моя проблема то, что MenuViewController не нуждается в панели инструментов, но UIViewControllers которые продвинуты на стек, делают. Каждый UIViewController это получает продвинутые вызовы setToolbarHidden:animated: в viewDidAppear:. Для сокрытия панели инструментов я звоню setToolbarHidden:animated: в viewWillDisappear:.

Показывая работы панели инструментов, такие, что, когда продвинутое представление появляется, слайды панели инструментов и представление изменяет размер правильно. Однако, когда кнопка "Назад" нажимается, панель инструментов скатывается, но представление не изменяет размер. Это означает, что существует черная полоса вдоль нижней части представления как другие переходы представления в. Я попытался добавить высоту панели инструментов к высоте представления до сокрытия панели инструментов, но это заставляет представление быть анимированным во время перехода так, чтобы была все еще черная полоса.

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

Это сообщение форума упоминает ту же проблему, но никакое обходное решение не упоминается.

30
задан Jeff Kelley 30 April 2010 в 18:34
поделиться

3 ответа

Это просто безумный удар в темноте, но, возможно, вам стоит запустить цикл выполнения один раз после того, как скрыть панель инструментов:

[viewController setToolbarHidden:YES animated:YES];
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.0]];
-2
ответ дан 28 November 2019 в 00:18
поделиться

Я тоже столкнулся с этой проблемой. В моем случае единственный способ успешно скрыть панель инструментов без отображения фона окна - это вызвать [self.navigationController setToolbarHidden: YES animated: animated] в -viewDidAppear вашего контроллера представления. : метод.

23
ответ дан 28 November 2019 в 00:18
поделиться

У меня была та же проблема, и вот решение, которое сработало для меня. Предположим, вы передаете 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.

-3
ответ дан 28 November 2019 в 00:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: