第一步:

在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; } }