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);
}
}
网友评论