美文网首页
在UITableViewStyleGrouped时,让heade

在UITableViewStyleGrouped时,让heade

作者: 山已几孑 | 来源:发表于2021-08-05 15:27 被阅读0次

UITableView的UITableViewStyleGrouped,group默认会给你一个sectionHeader和一个sectionFooter的默认高度,设计师会让把这个header或者footer设置为0。

就是把0.001 换成 CGFLOAT_MIN ,这样更好(看起来专业点?),懂得就不用往下看了。

这个功能简直太常用了,大家也都写过,网上的教程也巨多,大家一贯的写法,应该是下面这种:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return 0.01;//0.001,0.0001,0.00001
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    return 0.01;//0.001,0.0001,0.00001
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    return [UIView new];
}
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
    return [UIView new];
}

这么写当然没有问题,不管是小数点后几个0,都是为了让高度尽可能的小
这里,有个宏定义CGFLOAT_MIN,跟CGFLOAT_MAX对应,CGFloat的最大和最小值,我们直接用这个来替代0.001,就可以实现同样效果,如下:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return CGFLOAT_MIN;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    return CGFLOAT_MIN;
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    return [UIView new];
}
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
    return [UIView new];
}

Swift 可以用CGFloat.zero


PS:这里补充一丢丢(2021.9.27- 测试环境Xcode:playground),

使用CGFloat.zero 作为header或者footer的高度时,对应方法

    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        return nil
    }
    func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
        return nil
    }

是不会执行的,但是设置高度0.000001时,这个方法还是会走一下,(又多个使用CGFloat.zero、CGFLOAT_MIN的借口)。
因此设置为UIView() 也好,还是nil也好,都一样。

相关文章

网友评论

      本文标题:在UITableViewStyleGrouped时,让heade

      本文链接:https://www.haomeiwen.com/subject/wqznsltx.html