2016-07-26 59 views
0

在我view controller,我有一个tableView,我也添加自定义的导航栏上我view controller的看法,我想淡出我的自定义的导航栏的alpha,但其似乎没有用的,我打印我的自定义的导航栏的alpha,它显示了还好,但我的自定义的导航栏看起来像它alpha没有改变,这是我的代码:问:UITableView的scrollViewDidScroll函数来更改自定义的导航栏的Alpha

#pragma mark -- scorllView delegate 
- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    if(scrollView == _tableview){ 

     CGFloat currentOffsetY = scrollView.contentOffset.y; 
     // 0 ~ 358 -20 ~ 338 
     float alpha_of_scroll = (currentOffsetY + 20)/358.0; 

     NSLog(@"%f", alpha_of_scroll); 

     _narBarView.alpha = 1 - alpha_of_scroll; 

     NSLog(@"%f", _narBarView.alpha); 
    } 
} 

顺便说一句,我已经测试使用reactive cocoa,它与scrollViewDidScroll函数相似。

回答

0

试试这个:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    UIView *overlay = [[UIView alloc] initWithFrame:CGRectMake(0, -20, CGRectGetWidth(self.navigationController.navigationBar.bounds), CGRectGetHeight(self.navigationController.navigationBar.bounds) + 20)]; 
    overlay.userInteractionEnabled = NO; 
    overlay.backgroundColor = [UIColor orangeColor]; 
    [self.navigationController.navigationBar insertSubview:overlay atIndex:0]; 

    [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; 
} 


#pragma mark -- scorllView delegate 
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    if(scrollView == self.myTableView){ 
     CGFloat offsetY = scrollView.contentOffset.y; 
     NSLog(@"%f", offsetY); 
     if (offsetY > -64) { 
      if (offsetY >= 0) { 
       [self setNavigationBarAlpha:0]; 
      } else { 
       [self setNavigationBarAlpha:(-offsetY/64)]; 
      } 
     } else { 
      [self setNavigationBarAlpha:1]; 
     } 
    } 
} 

- (void)setNavigationBarAlpha:(CGFloat)alpha { 
    [[self.navigationController.navigationBar subviews] enumerateObjectsUsingBlock:^(UIView *obj, NSUInteger idx, BOOL *stop) { 
     obj.alpha = alpha; 
    }]; 
} 
+0

这个方法我已经发现某处,但我的'navgationBar'是我自定义创建的,这是我的'controller's'看法了''看法。 – aircraft