需求
當(dāng) UITableView 設(shè)置為 UITableViewStylePlain,且設(shè)置了sectionHeader 和 sectionFooter ,在滑動(dòng)的時(shí)候,頭部和尾部會(huì)有懸停的效果。
在某些UI搭建中,我們需要取消這個(gè)懸停效果。
解決
當(dāng)然最簡(jiǎn)單的解決方法就是把 UITableViewStylePlain 修改為 UITableViewStyleGrouped,但是我們的目的是在 UITableViewStylePlain 這個(gè)設(shè)置下取消這個(gè)懸停效果,所以需要用別的方法來達(dá)到這個(gè)目的。
解決這個(gè)問題的思路是,重寫 header、footer 的 setFrame: 方法,在 dequeueReusableHeaderFooterViewWithIdentifier 出 header 或者 footer 的時(shí)候,設(shè)置 frame 為 改變之后的 frame,從而達(dá)到取消懸停的效果。
header 里面的關(guān)鍵代碼如下:
header.h
@interface SectionHeaderView : UITableViewHeaderFooterView
@property (nonatomic,weak) UITableView *tableView;
@property(nonatomic,assign) NSUInteger section;
@end
header.m
/*
非懸停header 設(shè)置Header的frame為改變之后的frame, 當(dāng)Header到達(dá)頂部的時(shí)候,Header就會(huì)跟著單元內(nèi)容一起滾動(dòng),不再懸停
*/
- (void)setFrame:(CGRect)frame {
[super setFrame:[_tableView rectForHeaderInSection:_section]];
}
footer 里面的關(guān)鍵代碼如下:
footer.h
@interface SectionFooterView : UITableViewHeaderFooterView
@property (nonatomic,weak) UITableView *tableView;
@property(nonatomic,assign) NSUInteger section;
@end
footer.m
/*
非懸停Footer 設(shè)置Footer的frame為改變之后的frame, 當(dāng)Footer到達(dá)底部的時(shí)候,F(xiàn)ooter就會(huì)跟著單元內(nèi)容一起滾動(dòng),不再懸停
*/
- (void)setFrame:(CGRect)frame {
[super setFrame:[_tableView rectForFooterInSection:_section]];
}