1.利用Runtime给category中增加属性
category可以访问类中的已有的属性,但不能新增加属性。使用runtime实现新增属性mj_header,代码如下:
- (void)setMj_header:(MJRefreshHeader *)mj_header
{
if (mj_header != self.mj_header) {
// 删除旧的,添加新的
[self.mj_header removeFromSuperview];
[self insertSubview:mj_header atIndex:0];
// 存储新的
[self willChangeValueForKey:@"mj_header"]; // KVO
objc_setAssociatedObject(self, &MJRefreshHeaderKey,
mj_header, OBJC_ASSOCIATION_ASSIGN);
[self didChangeValueForKey:@"mj_header"]; // KVO
}
}
- (MJRefreshHeader *)mj_header
{
return objc_getAssociatedObject(self, &MJRefreshHeaderKey);
}
2.UIScrollview的contentInset属性
大家经常用到的是offset属性和contentsize属性,很少关注contentInset这个属性。
contentSize是UIScrollView可以滚动的区域(CGSize),offset是UIScrollViw滚动的距离(CGPoint)
而contentInset是UIScrollView上下左右四个方位额外扩展的区域(UIEdgeInsets),默认值是UIEdgeInsetZero
3.KVO,监听UIScrollview的offset属相,达到一定值的时候,做相应的处理。