1、在scrollview中以及tableview中,判断scrollview的滑动方向:
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
CGPoint translation = [scrollView.panGestureRecognizer translationInView:scrollView.superview];
if (translation.y>0) {
self.hiddenHeadView=NO;
}else if(translation.y<0){
self.hiddenHeadView=YES;
}
}
2、navigationbar以及tabbar的对UIScrollview以及UITableView的影响:
当整个UIViewController中的第一个View是UIScrollView或者是其子视图的时候,系统会自动根据当前页面中是否存在navigationbar或者是tabbar设置UIScrollView或者是其子视图的contentInset,目的就是为了让其contentView中的内容全部能展示出来,让用户全部能看到(注意:这只有在UIScrollView或者是其子视图是当前UIViewController中的第一个View的时候才可以)。在开发过程中,当需求需要在某一时刻突然隐藏掉navigationbar或者是tabbar时候,此时的contentInset还是初始值,这就导致了UIScrollView的contentView在视觉上会有向上或者是向下的偏移(隐藏navigationbar会有向下64偏移量,隐藏tabbar会有向上49的偏移量 注意:这种现象只在IOS8 - IOS10中有,在IOS11中不存在),解决这种问题方方法就是:
方法一:UIVIewController中的第一个View不能是UIScrollView或者是其子视图,在最上方添加一下代码
[self.view addSubview:[[UIView alloc] init]];
方法二:设置UIScrollView 的contentInset
self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);这种方法治标不治本,只是看起来有效果,但是当你push到另一个页面中在pop回来又会出现该问题
以上两种方法都是解决(ios8 - ios10)中的问题,在ios11中没有这种问题,iOS11中好像能自动调整contentInset,怎么隐藏navigationbar和tabbar都没影响