iOS开发iOS架构

UIScrollView 动态隐藏UISearchBar

2017-02-25  本文已影响156人  天堂宝宝_V

需求分析

最近项目需求要求在图片列表的顶部加上一个搜索框,实现的效果和微信的联系人信息界面类似,要求在初次进入图片列表时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,多多鼓励

上一篇 下一篇

猜你喜欢

热点阅读