可调整大小的导航栏 1.0.2

可调整大小的导航栏 1.0.2

测试测试
语言语言 Obj-CObjective C
许可证 eclipse
发布上次发布2015年6月

Todd Anderson维护。



开源实现 iOS 中可调整大小的导航栏

该项目受到了 Level Money转向 iOS 中的大导航标题以及苹果无法正确支持此功能的启发。我们无法找到任何实现,尽管该项目背后的许多原始研究和工作灵感来源于 edmentec (http://www.emdentec.com/blog/2014/2/25/hacking-uinavigationbar)

alt tag alt tag

如何使用

将 UINavigationController 替换为 LVResizableNavigationController。然后在任何需要修改导航高度的 UIViewController 中实现 LVResizableNavigationBarController 协议。

** 如果您正在使用 Storyboard,您还需要将导航栏类更改为 LVResizableNavigationBar。

代码以这种方式编写,即使不实现 LVResizableNavigationBarController 协议也不会有任何问题。

// Height for navigation bar -> should be larger than 44.
// If not implemented, 44 is assumed
- (CGFloat)resizableNavigationBarControllerNavigationBarHeight;

// Not required in order to change the BarTintColor but
// necessary if you want to animate color changes between pushes
- (UIColor *)resizableNavigationBarControllerNavigationBarTintColor;

// Optionally place a subview in the Navigation Bar.
// subview frame is determined by Navigation bar:
// {0, 44, screenWidth, resizableNavigationBarControllerNavigationBarHeight - 44}
- (UIView *)resizableNavigationBarControllerSubHeaderView;

限制

  • 代码当前假设状态栏大小为 20 点(可修复)。
  • 尚未支持横向模式
  • 导航栏只能用于纯色,不能用于图片或渐变
  • 动画并不完美

工作原理

请随意阅读代码。它有些“投机取巧”,可能在未来的 iOS 版本中会遇到问题。

  • 导航栏使用 sizeToFit 和 sizeThatFits 来调整大小。
  • 所有动画都由一个自定义导航动画来控制,以覆盖 iOS 默认行为。
  • 在动画开始时隐藏 NavigationItems,在动画完成后显示。
  • 我们依赖于改变 UINavigationController.view.backgroundColor 的颜色,这是导航栏大于 44 点时可见的。这也是为什么难以支持图片的原因。
  • 导航栏高度发生变化,以保持布局正常和正确。这允许在 Storyboard 或程序化设计中视图时不需要知道导航栏可能变得多高。