需求分析
最近项目需求要求在图片列表的顶部加上一个搜索框,实现的效果和微信的联系人信息界面类似,要求在初次进入图片列表时TableView上方的搜索框隐藏,当下拉表时才显示搜索框,上滑时隐藏搜索框,看来用searchDisplayController已经不能实现了。因此就考虑写一个demo
处理思路
根据UIScrollView的代理scrollViewDidScroll: 然后每次拖动时设置开始点,通过滑动结束后的offset判断界面的上下滑动方向。
主要代码
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
NSLog(@"contentOffset-----------%@",NSStringFromCGPoint(scrollView.contentOffset));
CGFloat distance = scrollView.contentOffset.y - self.startPoint.y;
if (fabs(distance) > 10) {
if (self.isShow == NO && distance < 0) {
NSLog(@"出现动画");
self.isShow = YES;
}
if (self.isShow == YES && distance > 0 && self.startPoint.y >= 0) {
NSLog(@"消失动画");
self.isShow = NO;
}
}
}
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
NSLog(@"scrollViewWillBeginDragging-----contentOffset:%@",NSStringFromCGPoint(scrollView.contentOffset));
self.startPoint = scrollView.contentOffset;
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
NSLog(@"scrollViewDidEndDragging-----contentOffset:%@",NSStringFromCGPoint(scrollView.contentOffset));
CGFloat distance = scrollView.contentOffset.y - self.startPoint.y;
if (self.isShow == YES && distance > 3 && self.startPoint.y >= 0) {
NSLog(@"消失动画");
self.isShow = NO;
}
self.startPoint = CGPointMake(0, -10000);
}
遇到的问题
1 demo使用的是UIScrollview用autolayout自动布局时要设置contentsize
2 初始的startPoint要设置为一个较大的负值
3 用户下拉回弹的情况需要处理是否隐藏searchBar
github demo 链接地址 欢迎star,多多鼓励