UITableView很多情況下我們需要分組section村视,并且需要加上頭部視圖header和底部視圖footer,默認(rèn)情況下這兩個(gè)視圖是不固定的它們會(huì)懸浮在表格的上面酒奶。但是我們今天要讓他們固定不動(dòng)蚁孔,讓UITableView 固定header和固定footer我們需要知道一個(gè)方法:
//當(dāng)scroview滑動(dòng)視圖時(shí)觸發(fā)奶赔,uitableview集成它所以表格也可以使用
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;
1.首先固定header的方法有兩個(gè)一個(gè)是在我們上面的方法里面重寫(xiě) contentOffset:
//固定頭部視圖
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
CGFloat sectionHeaderHeight = 40;
if (scrollView.contentOffset.y<=sectionHeaderHeight&&scrollView.contentOffset.y>=0) {
scrollView.contentInset = UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0);
} else if (scrollView.contentOffset.y>=sectionHeaderHeight) {
scrollView.contentInset = UIEdgeInsetsMake(-sectionHeaderHeight, 0, 0, 0);
}
}
還有一個(gè)更簡(jiǎn)單固定表格header方法是勒虾,選擇我們表格的樣式這里分兩種情況
第一種你自己創(chuàng)建的uitableview:
//使用UITableViewStylePlain樣式創(chuàng)建表格纺阔,這不妨礙你使用頭部視圖
UITableView *table = [[UITableView alloc]initWithFrame:self.view.frame style:UITableViewStylePlain];
第二種你繼承UITableViewController,你可以通過(guò)下面的方法改變樣式:
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
style = UITableViewStylePlain;
}
return self;
}
設(shè)置表格的樣式為UITableViewStylePlain之后你會(huì)發(fā)現(xiàn)頭部視圖乖乖的固定不動(dòng)了
2.固定footer,底部視圖如果我們使用UITableViewStylePlain這個(gè)樣式它還是不會(huì)固定的瘸彤,所以這有用第一種方式固定它:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
CGFloat sectionFooterHeight = 40;
CGFloat ButtomHeight = scrollView.contentSize.height - self.tableView.frame.size.height;
if (ButtomHeight-sectionFooterHeight <= scrollView.contentOffset.y && scrollView.contentSize.height > 0) {
scrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);
} else {
scrollView.contentInset = UIEdgeInsetsMake(0, 0, -(sectionFooterHeight), 0);
}
}
綜合以上的方法UITableView section固定header和固定footer的方法是改變樣式固定header修然,以及在- (void)scrollViewDidScroll:(UIScrollView *)scrollView;固定footer质况。
3.經(jīng)過(guò)實(shí)踐以上的方法會(huì)影響表格的下拉刷新效果愕宋。所以下面提供一種更好方案,我們的頭部視圖靠我們第一種就行了结榄,那底部視圖為了讓它不影響刷新效果中贝,我們就不在滑動(dòng)方法里面重寫(xiě)方法固定了,我們可以改用一個(gè)section來(lái)作為底部視圖臼朗,當(dāng)然這個(gè)section沒(méi)有頭部和底部視圖只是一行單純的標(biāo)題而已邻寿,雖然判斷麻煩了點(diǎn)不過(guò)為了好效果這些也就沒(méi)什么了。