隐藏NavigationBar 2.0.1

隐藏NavigationBar 2.0.1

测试已测试
Lang语言 SwiftSwift
许可 MIT
发布上次发布2017年9月
SwiftSwift 版本3.0
SPM支持 SPM

Tristan Himmelman 维护。



  • Tristan Himmelman

隐藏NavigationBar

一个易于使用的库(用 Swift 编写),可以管理用户滚动时隐藏和显示导航栏。

功能

隐藏NavigationBar 支持隐藏/显示以下视图元素:

  • UINavigationBar
  • UINavigationBar 和一个 UIView 扩展
  • UINavigationBar 和一个 UIToolbar
  • UINavigationBar 和一个 UITabBar

UINavigationBar

Screenshot

UINavigationBar 和一个 UIView 扩展

Screenshot

UINavigationBar 和一个 UIToolbar

Screenshot

一个 UINavigationBar 和一个 UITabBar

Screenshot

用法

  1. 导入隐藏NavigationBar
  2. 在您的 UIViewController 子类中包含一个类型为 HidingNavigationBarManager 的成员变量。
  3. viewDidLoad 函数中初始化该变量,传入 UIViewController 实例和将控制导航栏隐藏/显示的 UIScrollView 实例。
  4. 将以下 UIViewController 生命周期函数转发给 HidingNavigationBarManager 变量
override func viewWillAppear(animated: Bool)
override func viewWillDisappear(animated: Bool)
override func viewDidLayoutSubviews() //Only necessary when adding the extension view

最后转发以下 UIScrollViewDelegate 函数

func scrollViewShouldScrollToTop(scrollView: UIScrollView) -> Bool

以下是一个您 UIViewController 子类的示例

import HidingNavigationBar

class MyViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    var hidingNavBarManager: HidingNavigationBarManager?
    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        hidingNavBarManager = HidingNavigationBarManager(viewController: self, scrollView: tableView)
    }

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)

        hidingNavBarManager?.viewWillAppear(animated)
    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        hidingNavBarManager?.viewDidLayoutSubviews()
    }

    override func viewWillDisappear(animated: Bool) {
        super.viewWillDisappear(animated)

        hidingNavBarManager?.viewWillDisappear(animated)
    }

    //// TableView datasoure and delegate 

    func scrollViewShouldScrollToTop(scrollView: UIScrollView) -> Bool {
        hidingNavBarManager?.shouldScrollToTop()

        return true
    }

    ...
}

注意:隐藏NavigationBar 仅与设置为透明(true) 的 UINavigationBars 一起工作。

自定义

将一个扩展视图添加到 UINavigationBar

let extensionView = // load your a UIView to use as an extension
hidingNavBarManager?.addExtensionView(extensionView)

隐藏和显示 UITabBar 或 UIToolbar

if let tabBar = navigationController?.tabBarController?.tabBar {
    hidingNavBarManager?.manageBottomBar(tabBar)
}

应用处于前台时隐藏/显示/不执行任何操作

    hidingNavBarManager?.onForegroundAction = .Default  //Do nothing, state of bars will remain the same as when backgrounded
    hidingNavBarManager?.onForegroundAction = .Hide     //Always hide on foreground
    hidingNavBarManager?.onForegroundAction = .Show     //Always show on foreground

扩展阻力

当导航栏隐藏时,您可以通过某种“阻力”在导航栏开始扩展之前添加延迟。阻力值是指用户在导航栏开始扩展之前需要滚动的距离。

hidingNavBarManager?.expansionResistance = 150

UIRefreshControl

如果您正在使用 UIRefreshControl 与您的滚动视图,重要的是要让 HidingNavigationBarManager 了解这一点

hidingNavBarManager?.refreshControl = refreshControl

安装

如果您使用 CocoaPods,请在您的 Podfile 中添加以下行

pod 'HidingNavigationBar', '~> 0.3'

否则,直接将以下文件包含到您的项目中

  • HidingNavigationBarManager.swift
  • HidingViewController.swift