UITableView section header 不固定

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 方法中。

以上是关于UITableView section header 不固定的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 中的 indexPath 和 indexPath.section

带有 Section、IndexList 和 Search 的 UITableView

在 UITableView 中为 Section Header 添加填充

iOS8中 UITableView section 分区头部视图不显示

如何在 UITableView 中为每个 Section 启用水平分页

需要在 UITableView 中创建不同的section