iOS UITableView滑動使導航欄透明度漸變
//給導航條設定一個空的背景圖 使其透明化
[self.navigationController.navigationBar setBackgroundImage:[UIImagenew] forBarMetrics:UIBarMetricsDefault];
//去除導航條透明後導航條下的黑線
[self.navigationController.navigationBar setShadowImage:[UIImagenew]];
根據UITableView 的scrollViewDidScroll方法,我們能實時獲得contentOffset.y值,根據該值的變化對剛才擴充套件的UINavigationBar的背景色的alpha值,做相應的變化,具體實現:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat reOffset = scrollView.contentOffset.y + (kScreenH - 64) * 0.2; CGFloat alpha = reOffset / ((kScreenH - 64) * 0.2); if (alpha <= 1)//下拉永不顯示導航欄 { alpha = 0; } else//上劃前一個導航欄的長度是漸變的 { alpha -= 1; } // 設定導航條的背景圖片 其透明度隨 alpha 值 而改變 UIImage *image = [self imageWithColor:[UIColor colorWithRed:0.227 green:0.753 blue:0.757 alpha:alpha]]; [self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault]; } /// 使用顏色填充圖片 - (UIImage *)imageWithColor:(UIColor *)color { // 描述矩形 CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f); // 開啟點陣圖上下文 UIGraphicsBeginImageContext(rect.size); // 獲取點陣圖上下文 CGContextRef context = UIGraphicsGetCurrentContext(); // 使用color演示填充上下文 CGContextSetFillColorWithColor(context, [color CGColor]); // 渲染上下文 CGContextFillRect(context, rect); // 從上下文中獲取圖片 UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext(); // 結束上下文 UIGraphicsEndImageContext(); return theImage; }