2016-07-26 20 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