1.利用Runtime給category中增加屬性
category可以訪問類中的已有的屬性廊遍,但不能新增加屬性。使用runtime實(shí)現(xiàn)新增屬性mj_header乍丈,代碼如下:
- (void)setMj_header:(MJRefreshHeader *)mj_header
{
if (mj_header != self.mj_header) {
// 刪除舊的剂碴,添加新的
[self.mj_header removeFromSuperview];
[self insertSubview:mj_header atIndex:0];
// 存儲(chǔ)新的
[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屬性
大家經(jīng)常用到的是offset屬性和contentsize屬性,很少關(guān)注contentInset這個(gè)屬性轻专。
contentSize是UIScrollView可以滾動(dòng)的區(qū)域(CGSize)忆矛,offset是UIScrollViw滾動(dòng)的距離(CGPoint)
而contentInset是UIScrollView上下左右四個(gè)方位額外擴(kuò)展的區(qū)域(UIEdgeInsets),默認(rèn)值是UIEdgeInsetZero
3.KVO请垛,監(jiān)聽UIScrollview的offset屬相催训,達(dá)到一定值的時(shí)候,做相應(yīng)的處理叼屠。