1

Я просто хочу уменьшить высоту NavigaitonBar.Изменение высоты NavigationBar в 'viewDidAppear' и 'viewDidLoad', почему это другое?

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

CGRect navRect = self.navigationController.navigationBar.frame; 
navRect.size.height = 30; 
self.navigationController.navigationBar.frame = navRect; 

И я пытался поставить этот код в viewWillAppear, тот же вопрос снова произошел!

Но в viewDidAppear, он работает правильно, высота была изменена.

Я всегда добавляю некоторый barButtonItem в viewDidLoad. Это иллюстрирует, что NavigationController был успешно инициализирован в viewDidLoad, но почему нельзя изменить высоту?

Это смущает меня в течение длительного времени.

Спасибо!

+0

вставьте свой код в -viewDidLayoutSubview – itsji10dra

+0

@RoNiT У меня здесь нет кода. И почти весь код выше, который я дал. – Lucifron

+0

Я имею ввиду, измените 'heightConstraint' в -viewDidLayoutSubviews – itsji10dra

ответ

3

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

+0

Я пробовал использовать чистый код и раскадровку. Это не имеет смысла. Код, который я дал, работает только в viewDidAppear, это слишком странно. – Lucifron

1

Если вашей таблице необходимо каждый раз загружать данные новыми данными, то она должна находиться под viewWillAppear В противном случае, если таблица должна быть перезагружена одним Данным, которое не изменяется или нет какой-либо операции редактирования, выполняемой на Данные, вы должны использовать viewDidload

Смежные вопросы