在很多App中侵佃,經(jīng)常存在一種需求就是,界面上下滾動(dòng)時(shí)用戶的頭像也會(huì)跟著滾動(dòng)馋辈,而用戶頭像在視圖向上滾動(dòng)一定范圍時(shí)停留并在導(dǎo)航欄的位置,這里我實(shí)現(xiàn)了一個(gè)視圖叉抡,基本樣式如下:
基本用法如下:
1、單純的實(shí)現(xiàn)這一效果:
- (LEOHeaderView *)headerView {? ? if (!_headerView) {
_headerView = [[LEOHeaderView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kImageHeight)];
[_headerView setBackgroundImage:[UIImage imageNamed:@"background.jpg"]];
[_headerView setHeaderImage:[UIImage imageNamed:@"header.jpg"] text:@"leiliang"];
}? ? return _headerView;
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
[self.headerView reloadWithScrollView:scrollView];
}
2褥民、給頭像添加點(diǎn)擊回調(diào):
[self.headerView pressHeaderImageWithBlock:^{
NSLog(@"點(diǎn)擊頭像");}];
3洗搂、在視圖滾動(dòng)到頂部位置時(shí)改變navigationBar的顏色:
// navigationBar 的顏色可以根據(jù)這個(gè)方法來調(diào)整// @param reachtop: YES 已經(jīng)滾動(dòng)到頂部, NO 在頂部以下__weak typeof(self) weakSelf = self;
[self.headerView scrollViewStateChangeWithBlock:^(BOOL reachtop) {
[weakSelf.navigationController.navigationBar leo_setBackgroundColor:reachtop ? [UIColor lightGrayColor] : [UIColor clearColor]];
}];
使用起來很簡(jiǎn)單,只需要這幾行代碼就可以了耘拇,另外為了防止大家在使用過程中因?yàn)橐恍┘?xì)節(jié)問題導(dǎo)致有bug出現(xiàn),這里列出一些注意事項(xiàng)惫叛,只要大家按照這樣做就一定沒有問題了,具體如下:
1嘉涌、在 - (void)viewWillAppear:(BOOL)animated 方法中需要調(diào)用一次 [self.headerView reloadWithScrollView:self.tableView]夸浅,為了防止在剛進(jìn)入這一頁面的時(shí)候視圖有偏差?
2固耘、需要設(shè)置 tableView 的 contentInset 的 top 值為 kImageHeight - kNavigationBarHeight?
3、需要設(shè)置 tableView 的背景色為 [UIColor clearColor]厅目,否則會(huì)遮擋視圖?
4番枚、需要設(shè)置 tableView 的頂部據(jù)屏幕頂部為 64损敷,否則如果你想設(shè)置navigationBar為透明時(shí)頂部有留白
?5、需要將視圖插入到 tableView 的底部拗馒,這里是將視圖加在 self.view 上,并在tableView的底部诱桂,[self.view insertSubview:self.headerView belowSubview:self.tableView]?
6、需要在 - (void)scrollViewDidScroll:(UIScrollView *)scrollView 方法中調(diào)用 [self.headerView reloadWithScrollView:scrollView]?
7友绝、需要設(shè)置 self.automaticallyAdjustsScrollViewInsets = NO; 防止?jié)L動(dòng)視圖有偏差