iOS系統自帶的UITableView,當數據分為多個section的時候,在UITableView滑動的過程中,默認section header是固定在頂部的,滑動到下一個section的時候,下一個section header把上一個section header頂出屏幕外。典型的應用就是通訊錄。
默認情況下,UITableView的section header是固定的,如何讓section header不固定呢?也就是隨着UITableView的滑動而滑動,頂部不是一直都顯示section header。方法是設置UITableView 的contentInset。代碼如下:
#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 方法中。