iOS开发-关于UITableView去掉粘性的问题

关于UITableView去掉header/footer粘性的问题,博主也曾经遇到过并解决,今天一朋友问起来,所以回头来说说这个问题,并不很高明,都是一些小经验罢了。

去掉粘性,去百度的话,你会看到大堆大堆的几乎一样的代码:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView  
{  
    CGFloat sectionHeaderHeight = 40;  
    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);  
    }  
}

以上代码就是网上比较常见的方法,现在来做个分析,为什么要用上面的方法呢?如果你用UITableViewStylePlain模式,是有粘性的,如果不需要粘性,UITableViewStyleGroup是最好的选择,然后牵涉到上面的方法,为什么不好用呢,因为上面的代码只对一个分组或者对拥有多个一样高度的header的分组管用,如果我有不确定个分组,高度也不确定,上面的方法可以说是没一点用,所以为什么不用UITableViewStyleGroup模式呢?

有人说系统会默认给页眉页脚,也就是header和footer,如果不写header和footer的代理或者给0,header和footer会都显示且系统默认会给一个非0的高度,具体多少记不清了,如果你不想使用header或footer其中的一项你完全可以通过设置极小的高度隐藏的:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 0.001;  //不能为0,否则为默认高度
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    return 0.001;  //不能为0,否则为默认高度
}

header,footer都会有默认高度,所以你在设置header高度的时候会发现总是多了那么一点,大概有20,那其实是footer的高度,所谓的页眉页脚,只需要按照上面的方法设置即可,肉眼是无法发现的,然后就可以通过

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

来自定义header的内容。这种情况下想要去掉粘性只需要用分组模式即可。实际上多分组且各个header不一的情况,通过设置footer为极小数来欺骗肉眼,再设置header高度并自定义的方法是最好的解决办法。

总结:如果使用分组模式,header和footer的高度是一定要设置的,切记,不需要使用它就设置为0.001这样的极小数且不能为0;使用plain模式,那么最好是没有分组(tableView.tableHeaderView这个方法大家知道,不需要设置分组的),如果用了分组且想去掉粘性,如果是header高度都一样的情况,最上面那个scrollView的代理方法是可以奏效的,否则还是选择group分组模式,具体怎么做,上面已经给出,请认真看,如有问题,欢迎加群询问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodingFire

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值