UITableView 繼承自UIScrollView,如果要實(shí)現(xiàn)這種效果抢埋,無(wú)非是監(jiān)聽下拉動(dòng)作纬霞,改變頭部視圖frame.
在這里用到UIScrollView的兩個(gè)代理方法:
- (void)scrollViewDidScroll:(UIScrollView*)scrollView;//滑動(dòng)即會(huì)調(diào)用(改變頭部視圖的frame)
- (void)scrollViewDidEndDecelerating:(UIScrollView*)scrollView;//滑動(dòng)結(jié)束時(shí)調(diào)用(恢復(fù)頭部視圖原始frame)
//這兩個(gè)代理方法實(shí)現(xiàn):
- (void)scrollViewDidScroll:(UIScrollView*)scrollView{
CGFloatyOffset =self.tableView.contentOffset.y;
if(yOffset<0)
{
CGFloatheight =ABS(yOffset)+HeaderViewHeight;
self.topViewCell.frame=CGRectMake(0,yOffset,DEVICE_WIDTH, height);
}
}
- (void)scrollViewDidEndDecelerating:(UIScrollView*)scrollView
{
[UIViewanimateWithDuration:0.2animations:^{
CGRectframe =self.topViewCell.frame;
frame.size.height=HeaderViewHeight;
self.topViewCell.frame= frame;
}];
}
這里拿一個(gè)相對(duì)簡(jiǎn)單的例子說(shuō)一下:
就這樣一個(gè)界面狼渊,來(lái)說(shuō)一下實(shí)現(xiàn)過(guò)程纽帖,其中的數(shù)據(jù)都是些死數(shù)據(jù)央串,只為了舉例。
這里只重點(diǎn)說(shuō)一下放大頭部視圖效果代碼约谈,因?yàn)槠渌皇浅R?guī)的分section的tableView笔宿。
首先,將這個(gè)整體作為頭部視圖棱诱,
為了使用簡(jiǎn)單泼橘,將該視圖進(jìn)行封裝,創(chuàng)建一個(gè)類LRHMeTopView迈勋,使用xib進(jìn)行創(chuàng)建炬灭,提供一個(gè)類方法+(instancetype)loadTopView,用于返回視圖靡菇。
+(instancetype)loadTopView
{
return[[[NSBundlemainBundle]loadNibNamed:@"LRHMeTopView"owner:selfoptions:nil]lastObject];
}
然后創(chuàng)建cell--LRHMeTopViewCell,將該視圖作為cell的內(nèi)容視圖重归,
主要代碼:
//將視圖添加到cell中
- (void)awakeFromNib {
[superawakeFromNib];
self.backView= [LRHMeTopViewloadTopView];
[self.contentViewaddSubview:self.backView];
[self.backViewmas_makeConstraints:^(MASConstraintMaker*make) {
make.edges.equalTo(self.contentView);
}];
//類方法獲取cell對(duì)象
}
+(instancetype)loadCell
{
return[[[NSBundlemainBundle]loadNibNamed:@"LRHMeTopViewCell"owner:selfoptions:nil]lastObject];
}
接下來(lái)就是tableView的實(shí)現(xiàn)了。
代理方法的實(shí)現(xiàn):
完整代碼已放到github,不對(duì)的地方镰官,還請(qǐng)指正提前,如果喜歡希望能給個(gè)星哦!