使用安全区域的iOS自定义弹性导航栏

使用安全区域的iOS自定义弹性导航栏,ios,swift,uinavigationcontroller,uinavigationbar,Ios,Swift,Uinavigationcontroller,Uinavigationbar,我一直在为我的应用程序创建自定义的弹性导航栏。导航栏将有3种不同的状态,分别为展开、正常和完全固态背景。膨胀状态为414px,正常状态为130px,固体状态为90px。我一直在按照自定义导航栏上的layoutSubviews函数更新背景色和图像模糊 我已经实现了自定义导航控制器类,并使用NSKeyValueObservation观察俯视图控制器的滚动视图的内容偏移。当触发willShow功能时,观察开始。NavigationBar应启动130px,并将使用当前偏移量更新自身 我对这件事有意见 当

我一直在为我的应用程序创建自定义的弹性导航栏。导航栏将有3种不同的状态,分别为展开、正常和完全固态背景。膨胀状态为414px,正常状态为130px,固体状态为90px。我一直在按照自定义导航栏上的layoutSubviews函数更新背景色和图像模糊

我已经实现了自定义导航控制器类,并使用NSKeyValueObservation观察俯视图控制器的滚动视图的内容偏移。当触发willShow功能时,观察开始。NavigationBar应启动130px,并将使用当前偏移量更新自身

我对这件事有意见

  • 当我导航到新屏幕时,我在更新导航栏高度和附加插图方面遇到问题
  • 推送新视图会触发观察,并导致导航栏上出现不必要的更新
  • 由于我在整个流程中只使用一个导航栏,当用户刷回屏幕时,他们仍然必须看到以前的导航栏,因此我实现了自定义转换类,但它也会造成混乱,尤其是用户取消
  • 仅使用一个导航需要我保持最后一个视图控制器的滚动视图位置、导航栏高度等
  • 我一直在与我的首席开发人员讨论如何保持当前的结构或为每个视图控制器实现不同的导航栏,但我没有看到使用公共导航栏的任何好处,除了可能使用RAM之外,但它是无法维护的。我还可以补充一点,这种方法创建了巨大的导航栏类,因为我们为不同的屏幕实现了不同的导航栏

    在这种情况下,您将使用哪种实现?提前谢谢