iOS 實現UINavigationBar隨ScrollView偏移而漸變的效果
阿新 • • 發佈:2019-02-11
第一步:
在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顏色漸變的操作。
if (offsetY >50) {- (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;"> //數值自己測試
CGFloat alpha =MIN(1,1 - ((50 +64 - offsetY) / 64)); self.navigationController.navigationBar.alpha = alpha; }else { self.navigationController.navigationBar.alpha = 0; } }