Я следил за этим сообщением , в котором объясняется, как вы можете реализовать пользовательский UINavigationBar
, который имеет увеличенную высоту, если, например, вы хотели поместить дополнительные элементы ui в панель навигации под остальной частью содержимого панели, которая будет сохраняться между навигацией в стеке. Этот код работает очень хорошо в случае, когда вы всегда хотите, чтобы это была увеличенная высота.
В моем приложении мне нужно запустить панель навигации со своей высотой по умолчанию, а затем увеличить ее позже, добавив больше контента после того, как пользователь выполнит задание. Очень похоже на информацию о композиции и элементы управления в магазине iTunes Store:
Итак, я поместил некоторые проверки, чтобы не переделать ничего, если свойство BOOL
NO
. Когда я устанавливаю его на YES
, я вызываю [self setNeedsDisplay]
, который вызывается layoutSubviews
, чтобы правильно позиционировать его на основе этого логического значения. sizeThatFits
также вызывается, и я возвращаю правильную высоту.
Проблема в том, что я не могу называть [self setTransform:CGAffineTransformMakeTranslation(0, -(NavigationBarHeightIncrease))];
в initialize
. Вместо этого я вызываю, что в то же время я изменяю значение boolean на YES
. Из-за этого все мои элементы перемещаются вверх по этой сумме. Но если я не вызываю setTransform
, элементы в навигационной панели находятся в правильном положении, но сама панель расположена слишком далеко вниз, так что пользовательский вид, который я добавил в панель, отображается над таблицей вид контроллера - он истекает кровью, а дополнительное пространство, которое я добавил, является черным, а не фоном цвета панели навигации.
Если я вызываю setTransform
в initialize
, когда высота является высотой по умолчанию, элементы перемещаются вверх, когда они не должны быть.
Итак, как я могу правильно динамически изменять высоту и позиционирование подкласса UINavigationBar
?