Я следовал этому blog post, в котором объясняется, как вы можете реализовать пользовательский UINavigationBar
с повышенной высотой, если, например, вы хотели поместить дополнительные элементы ui в панель навигации под остальной частью бара содержимое, которое будет сохраняться между навигацией в стеке. Этот код работает очень хорошо в случае, когда вы всегда хотите, чтобы это была увеличенная высота.Динамически увеличивать/уменьшать высоту пользовательского UINavigationBar
В моем приложении мне нужно запустить панель навигации по умолчанию, а затем увеличить ее позже, добавив больше контента после того, как пользователь выполнит задание. Очень похоже на информацию песни и управления в Itunes магазине:
Так что я положил некоторые проверки на месте, чтобы ничего не изменить, если BOOL
NO
свойство. Когда я установил его на YES
, я вызываю [self setNeedsDisplay]
, который будет вызывать layoutSubviews
, чтобы разместить все правильно на основе этого логического значения. sizeThatFits
также называется, и я возвращаю правильную высоту.
Проблема в том, что я не могу позвонить [self setTransform:CGAffineTransformMakeTranslation(0, -(NavigationBarHeightIncrease))];
в initialize
. Вместо этого я называю это, в то же время меняю логическое значение на YES
. Из-за этого все мои элементы перемещаются вверх по этой сумме. Но если я не звоню setTransform
, элементы в навигационной панели находятся в правильном положении, но сама панель расположена слишком далеко вниз, так что пользовательский вид, который я добавил в панель, показан выше, чем вид контроллера представления - он истекает кровью, и дополнительное пространство, которое я добавил, является черным цветом фона панели навигации.
Если я вызываю setTransform
в initialize
, когда высота является высотой по умолчанию, элементы перемещаются вверх, когда их не должно быть.
Итак, как я могу правильно динамически изменять высоту и позиционирование подкласса UINavigationBar
?
Я бы не рекомендовал менять высоту UINavigationBar или ее реализацию вообще, вы никогда не знаете, что будет изменено в UINavigationBar после следующей версии iOS, Вместо этого я бы использовал пользовательский UIView с тем же фоном/стилем и приложением это в верхнем руководстве по макету, тогда вы можете легко манипулировать своими представлениями без private-apis – ogres
@ogres. К сожалению, мне нужно, чтобы это пользовательское представление сохранялось между нажатиями и поп-операциями, поэтому я не могу добавить его в представление контроллера представления - ему нужно как-то привязаны к навигационному контроллеру/панели. – Joey
Почему бы не создать один контроллер RootView, а затем включить в него навигационный контроллер? то вы можете поддерживать просмотры – ogres