iOS 实现UINavigationBar随ScrollView偏移而渐变的效果

第一步:

在viewWillAppear方法中先设置navigationController的代理为self(控制器本身)。

-(void)viewWillAppear:(BOOL)animated
{
    [superviewWillAppear:animated];
     self.navigationController.delegate =self;
 }


第二步:

在navigationController这个代理方法中判断一下,如果是此控制器就设置透明,不是此控制器就设置成不同样式,这样做的目的是,当你进入navigationBar透明的这个控制器后,不管push还是pop到别的控制器时,navigationBar不会变成透明。

-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if (viewController == self) {
        // 背景设置为黑色
        self.navigationController.navigationBar.tintColor = [UIColor blackColor];
        // 透明度设置为0
        self.navigationController.navigationBar.alpha = 0;
        // 设置为半透明
        self.navigationController.navigationBar.translucent = YES;
     
      } else {
        // 进入其他视图控制器
        self.navigationController.navigationBar.alpha = 1;
        // 背景颜色设置为系统默认颜色
        self.navigationController.navigationBar.tintColor = nil;
        self.navigationController.navigationBar.translucent = NO;
    }
}


第三步:
当拖动你的tableView或者collectionView时,会调用UIScrollowView的这个代理方法,在它里面做navigationBar颜色渐变的操作。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
     CGFloat offsetY = scrollView.contentOffset.y;
<pre name="code" class="objc" style="color: rgb(54, 46, 43); font-size: 14px; line-height: 26px;">    //数值自己测试
if (offsetY >50) {
CGFloat alpha =MIN(1,1 - ((50 +64 - offsetY) / 64)); self.navigationController.navigationBar.alpha = alpha; }else { self.navigationController.navigationBar.alpha = 0; } }

 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值