动态增加/减少自定义UINavigationBar的高度

Jor*_*n H 11 uinavigationbar ios

我按照这篇博客文章解释了如何实现UINavigationBar具有增加高度的自定义,例如,如果您想在其他条形内容下面的导航栏中添加其他ui元素,这些元素将在堆栈上的导航之间保留.在您总是希望它增加高度的情况下,此代码非常有效.

在我的应用程序中,我需要以默认高度启动导航栏,然后在用户执行给定操作后增加更多内容.与iTunes Store中的歌曲信息和控件非常相似:

在此输入图像描述

所以,如果BOOL属性是,我会做一些检查,以便不重新定位任何东西NO.当我将其设置为时YES,我调用[self setNeedsDisplay]哪个将layoutSubviews根据该布尔值调用适当的位置.sizeThatFits也叫,我返回适当的高度.

问题是,我不能叫[self setTransform:CGAffineTransformMakeTranslation(0, -(NavigationBarHeightIncrease))];initialize.相反,我在调用它的同时将布尔值更改为YES.因此,我的所有元素都会向上移动.但是如果我不打电话setTransform,导航栏中的元素位于正确的位置,但是栏本身位置太远,所以我添加到栏中的自定义视图显示在视图控制器的视图之上 -它流血了,我添加的额外空间是黑色而不是导航栏的背景颜色.

如果我打电话setTransforminitialize,当高度是默认的高度,这些元素被移动时,他们不应该.

那么,我怎样才能正确地动态改变UINavigationBar子类的高度和位置呢?

Chr*_*nzo 1

正如评论中所建议的,为了实现自定义导航栏(不是本机控件的子类)在导航控制器中的控制器的推送和弹出过程中持续存在的行为,您需要有一个带有自定义导航栏的控制器,然后解析为 a 的单个嵌入式视图,UINavigationController其视图控制器位于下面。然后,还需要将导航控制器的委托设置为根控制器,以便在推送和弹出子控制器时可以更新标题和其他属性。我在下面提供了故事板版本的屏幕截图:

嵌入式导航控制器示例