iOS资料O~1iOS UI

iOS-UITableView你需要掌握的属性

2016-06-06  本文已影响2529人  小小小阿博er

背景

refresh.gif

知识点

1)contenSize -- 滚动视图内容的尺寸

偏移量.png

2)contentOffset -- 偏移量

坐标系.png

3)showsHorizontalScrollIndicatorshowsVerticalScrollIndicator

4)scrollsToTop

5)estimatedHeight --- 估算高度

6)cellForRowAtIndexPath和indexPathForSelectedRow

利用偏移量简单实现一下下拉刷新(仿新浪微博)

下拉刷新.png
/**
 *  停止拖拽,需要在这个方法里面监听停止拖拽的时候偏移量,根据偏移量判断刷新控件是否完全显示,是的话进入刷新,不是的话直接返回
 */

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    // 如果正在刷新, 直接返回
    if (self.isHeaderRefreshing) return;

    // 当偏移量 <= offsetY时(注意正负值), 刷新控件就完全出现了
    CGFloat offsetY = - (self.tableView.contentInset.top + self.headerBtn.lb_height);
    [self.loadingView stopAnimating];
    self.headerBtn.imageView.hidden = NO;
    if (self.tableView.contentOffset.y <= offsetY) { // 刷新header完全出现了
        // 进入刷新状态
        [self headerBeginRefresh];
    }
}
#pragma mark - 开始刷新
- (void)headerBeginRefresh
{
    //如果当前正在刷新,那么不往下继续执行
    if (self.isHeaderRefreshing) return;
    //否则,进入刷新状态
    self.headerRefreshing = YES;

    //显示菊花
    self.loadingView.alpha = 1.0;
    [self.loadingView startAnimating];

    [self.headerBtn setTitle:@"加载中..." forState:UIControlStateNormal];

    self.headerBtn.imageView.transform = CGAffineTransformIdentity;
    self.headerBtn.imageView.hidden = YES;

    // 显示加载中...,这个时候这个刷新控件是会自己悬浮在导航栏下面,不需要人为拽着不松手
    //这个效果,我们可以通过增大tabbleview的内边距来达到这个效果
    [UIView animateWithDuration:0.25f animations:^{

        //因为刷新控件的y值就是-50,它自己高度也是50,所以只需要让tabbleview内边距向下走50,那么刷新控件就会完全显示了
        UIEdgeInsets inset = self.tableView.contentInset;
        inset.top += self.headerBtn.lb_height;

        self.tableView.contentInset = inset;
    }];
    //由于是模拟发送网络请求,所以延迟1.5秒后再去加载数据
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

        // 发送请求给服务器
        [self loadNewData];
    });
}

#pragma mark - 结束刷新
- (void)headerEndRefresh
{
    self.headerRefreshing = NO;
    self.headerBtn.hidden = YES;

    // 减小内边距
    // 刷新已经停止,不需要刷新控件显示在用户能看到的范围,所以需要减少tabbleview的内边距
    [UIView animateWithDuration:0.25 animations:^{

        UIEdgeInsets inset = self.tableView.contentInset;
        inset.top -= self.headerBtn.lb_height;
        self.tableView.contentInset = inset;

    }completion:^(BOOL finished) {//刷新控件缩回到用户看不到的位置后,更新刷新控件以及内部子控件的状态
        self.headerBtn.hidden = NO;
        self.loadingView.alpha = 0.0;
        [self.loadingView stopAnimating];
    }];
}

ok,效果实现基本结束了,感谢您的阅读,不足之处欢迎指正

点击查看代码实现

上一篇下一篇

猜你喜欢

热点阅读