iOS开源之HKScrollingNavAndTabBar

An easy to use library that manages hiding and showing of navigation bar, tab bar or toolbar when user scrolls.

Github:

https://github.com/HustHank/HKScrollingNavAndTabBar

Features

Supports following view elements:

  • UINavigationBar
  • UINavigationBar and a UIToolbar
  • UINavigationBar and a UITabBar
  • UINavigationBar and a Custom UITabBar (such as exceed center button)

Support function:

  • Hiding/showing when scrolling
  • Control hiding/showing separately
  • Alpha fade when scrolling
  • Set UINavigationBar position when UINavigationBar hidden
  • Scrolling state change block
  • Works with ARC and iOS >= 8

Support functions

UINavigationBar

UINavigationBar and a UIToolbar

UINavigationBar and a UITabBar

UINavigationBar and an exceed UITabBar

Control hiding/showing separately

Set UINavigationBar position

Installation

CocoaPods

The easiest way of installing HKScrollingNavAndTabBar is via CocoaPods.

  • pod 'HKScrollingNavAndTabBar'
  • #import <UIViewController+HKScrollingNavAndTabBar.h> where you want to scrolling navigationBar or tabBar.

Old-fashioned way

  • Add HKScrollingNavAndTabBar folder to your project.
  • #import "UIViewController+HKScrollingNavAndTabBar.h" where you want to scrolling navigationBar or tabBar.

Usage

In UIViewController:
Start scrolling navigation bar while a scrollView scroll:

[self hk_followScrollView:self.scrollView];

Stop scrolling navigation bar:

[self hk_stopFollowingScrollView];

Scrolling with tab bar:

[self hk_managerBotomBar:self.toolBar]

Or scrolling with tool bar:

[self hk_managerBotomBar:self.tabBarController.tabBar]

Scrolling without navigation bar:

[self hk_managerTopBar:nil];

Scrolling without tab bar:

[self hk_managerBotomBar:nil];

Set nav bar contracted at top:

self.hk_topBarContracedPostion = HKScrollingTopBarContractedPositionTop;

Or set nav bar contracted at top:

self.hk_topBarContracedPostion = HKScrollingTopBarContractedPositionStatusBar;

Monitor nav or tab bar state:

[self hk_setBarDidChangeStateBlock:^(HKScrollingNavAndTabBarState state) {
        switch (state) {
            case HKScrollingNavAndTabBarStateExpanded:
                NSLog(@"navbar expended");
                break;
            case HKScrollingNavAndTabBarStateExpanding:
                NSLog(@"navbar is expending");
                break;
            case HKScrollingNavAndTabBarStateContracting:
                NSLog(@"navbar is contracting");
                break;
            case HKScrollingNavAndTabBarStateContracted:
                NSLog(@"navbar contracted");
                break;
        }
       
    }];

Below code is an example of how your UIViewController subclass should look:

- (void)viewDidLoad {
    [super viewDidLoad];

    [self hk_followScrollView:self.tableView];
    [self hk_managerTopBar:self.navigationController.navigationBar];
    [self hk_managerBotomBar:self.tabBarController.tabBar];
        [self hk_setBarDidChangeStateBlock:^(HKScrollingNavAndTabBarState state) {
        switch (state) {
            case HKScrollingNavAndTabBarStateExpanded:
                NSLog(@"navbar expended");
                break;
            case HKScrollingNavAndTabBarStateExpanding:
                NSLog(@"navbar is expending");
                break;
            case HKScrollingNavAndTabBarStateContracting:
                NSLog(@"navbar is contracting");
                break;
            case HKScrollingNavAndTabBarStateContracted:
                NSLog(@"navbar contracted");
                break;
        }
       
    }];
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self hk_expand];
}

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [self hk_expand];
}

- (void)dealloc {
    [self hk_stopFollowingScrollView];
}

Note:

HKScrollingNavAndTabBar only works with UINavigationBars that have translucent set to YES.

推荐阅读更多精彩内容