UITableView section header 不固定

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

相關文章
相關標籤/搜索