Я следил за этим сообщением , в котором объясняется, как вы можете реализовать пользовательский UINavigationBar, который имеет увеличенную высоту, если, например, вы хотели поместить дополнительные элементы ui в панель навигации под остальной частью содержимого панели, которая будет сохраняться между навигацией в стеке. Этот код работает очень хорошо в случае, когда вы всегда хотите, чтобы это была увеличенная высота.
В моем приложении мне нужно запустить панель навигации со своей высотой по умолчанию, а затем увеличить ее позже, добавив больше контента после того, как пользователь выполнит задание. Очень похоже на информацию о композиции и элементы управления в магазине iTunes Store:

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