iOS系統自帶的UITableView,當數據分爲多個section的時候,在UITableView滑動的過程當中,默認section header是固定在頂部的,滑動到下一個section的時候,下一個section header把上一個section header頂出屏幕外。典型的應用就是通信錄。函數
默認狀況下,UITableView的section header是固定的,如何讓section header不固定呢?也就是隨着UITableView的滑動而滑動,頂部不是一直都顯示section header。方法是設置UITableView 的contentInset。代碼以下:spa
#pragma mark - scrollView代理函數 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { // 修改contentSize if([scrollView isKindOfClass:[UITableView class]]){// 不固定section CGFloat sectionHeaderHeight = pxToCoordinate(TABLECELL_SECTION_HEADER); 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); } } }
原理:當滑動的值大於section header的高度時,設置其contentInset,達到不顯示header的效果,這樣就相似於將header給頂出了屏幕;當滑動至小於section header的高度時,恢復contentInset,顯示header。代理
須要注意:由於UITableView 滑動時contentOffset會不斷的改變,所以該部分代碼須要寫到 scrollViewDidScroll 方法中。code