UITableView section header 不固定


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 方法中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM