iOS经验总结

iOS开发中UIScrollView的contentOffset

2021-03-19  本文已影响0人  梁森的简书

contentOffset

我们在滑动UIScrollView的时候,它的contentOffset随着滑动会一直变化。

contentInset

在UIScrollView的frame之外又增加的一块区域。

MJRefresh的header和footer分别怎么添加的?

header:
直接添加在UIScrollView上,在UIScrollView的frame之外,y值是负数(header高度的相反数)。
footer:
直接添加在UIScrollView上,在UIScrollView的frame之外,y值是正数(UIScrollView的contentSize的height)。为了显示出来,需要设置UIScrollView的contentInset,bottom值与footer的高度相等。

模拟UITableView添加refresh的代码

// 下拉刷新View
    CGFloat headerH = 50.0;
    UIView * refreshHeader = [[UIView alloc] initWithFrame:CGRectMake(0, -headerH, self.tableView.frame.size.width, headerH)];
    [self.tableView insertSubview:refreshHeader atIndex:0];
    refreshHeader.backgroundColor = [UIColor redColor];

    // 上拉加载view
    CGFloat footerY = self.tableView.contentSize.height;
    CGFloat footerH = 50.0;
    UIView * refreshFooter = [[UIView alloc] initWithFrame:CGRectMake(0, footerY, self.tableView.frame.size.width, footerH)];
    [self.tableView insertSubview:refreshFooter atIndex:0];
    refreshFooter.backgroundColor = [UIColor greenColor];
    _refreshFooter = refreshFooter;
    
    // 设置tableview的contentInset
    self.tableView.contentInset = UIEdgeInsetsMake(0, 0, footerH, 0);
    
    // 监听tableview的contenSize的变化
    NSKeyValueObservingOptions options = NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld;
    [self.tableView addObserver:self forKeyPath:@"contentSize" options:options context:nil];
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
    if ([keyPath isEqualToString:@"contentSize"]) {
        CGFloat footerY = self.tableView.contentSize.height;
        CGFloat footerH = 50.0;
        self.refreshFooter.frame = CGRectMake(0, footerY, self.tableView.frame.size.width, footerH);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读