前言
今天和产品沟通,要仿照一个APP,发现这个APP上滑时隐藏navigationBar,虽然也是隐藏但是效果和其他完全不一样,因为以前没见过也没做过,所以试着去实现一下,Google了一下,发现思路主要还是从KVO来下手。
原APP的效果
实现过程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context { if ([object isEqual:myTableView] && [keyPath isEqualToString:@"contentOffset"]) { CGFloat newY = [change[@"new"] CGPointValue].y; CGFloat oldY = [change[@"old"] CGPointValue].y; float i = newY - oldY; NSLog(@"%f",myTableView.contentOffset.y); if (myTableView.contentOffset.y > -64 && myTableView.contentOffset.y <= 24) { if (i <= 0 && _isHide == NO && self.navigationController.navigationBar.frame.origin.y == 20){ return; } _isHide = NO; self.navigationController.navigationBar.frame = CGRectMake(0, -44 - myTableView.contentOffset.y, self.view.bounds.size.width, 44); self.navigationController.navigationBar.alpha = -myTableView.contentOffset.y/64; }else if (myTableView.contentOffset.y > 24) { if (i > 10) { _isHide = YES; }else if(i < -10) { _isHide = NO; } } [self.navigationController setNavigationBarHidden:_isHide animated:YES]; } }
|
完成效果图
总结