学习笔记一、UITableView上下滚动导航栏渐变隐藏和显示效果

大体思路:定义一个UINavigationBar的Category,在NavigationBar顶层增加一个视图overlay。滚动时通过设置overlay视图的背景色和透明度来达到隐藏和显示导航栏效果。代码如下:

#import <UIKit/UIKit.h>

@interface UINavigationBar (CustomNavigationBar)

- (void)setCustomBackgroundColor:(UIColor *)backgroundColor;

@end

#import "UINavigationBar+CustomNavigationBar.h"
#import <objc/runtime.h>

@implementation UINavigationBar (CustomNavigationBar)

static char overlayKey;

- (UIView *)overlay
{
    return objc_getAssociatedObject(self, &overlayKey);
}

- (void)setOverlay:(UIView *)overlay
{
    objc_setAssociatedObject(self, &overlayKey, overlay, OBJC_ASSOCIATION_RETAIN);
}

- (void)setCustomBackgroundColor:(UIColor *)backgroundColor
{
    if (!self.overlay) {
        [self setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
        [self setShadowImage:[UIImage new]];
        //需要遮住状态栏
        self.overlay = [[UIView alloc] initWithFrame:CGRectMake(0, -20, [UIScreen mainScreen].bounds.size.width, 64)];
        self.overlay.autoresizingMask = UIViewAutoresizingFlexibleWidth ;
        [self insertSubview:self.overlay atIndex:0];
    }
    self.overlay.backgroundColor = backgroundColor;
}

tableview滚动时,调用方法设置导航栏背景色:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    UIColor *color = [UIColor blueColor];
    CGFloat offsetY = scrollView.contentOffset.y;
    if (offsetY > 0) {
        CGFloat alpha = 1- (64 - offsetY) / 64;
        [self.navigationController.navigationBar setCustomBackgroundColor:[color colorWithAlphaComponent:alpha]];
    } else {
        [self.navigationController.navigationBar setCustomBackgroundColor:[color colorWithAlphaComponent:0]];
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值