美文网首页
UITableViewStyleGrouped模式下烦人的多余间

UITableViewStyleGrouped模式下烦人的多余间

作者: 青春码头客 | 来源:发表于2018-03-07 10:10 被阅读0次

    第一个section上边多余间距处理

    // 隐藏UITableViewStyleGrouped上边多余的间隔

    _tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, CGFLOAT_MIN)];

    每个section下边多余间距处理

    // 隐藏UITableViewStyleGrouped下边多余的间隔

    - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {

        return CGFLOAT_MIN;

    }

    备注:若传入的 height == 0,则 height 被设置成默认值

    若 height 小于屏幕半像素对应的高度,则不会被渲染,所以这里返回CGFLOAT_MIN,其实返回0.01也是可以的

    补充:代码顺序的不同导致第一个section上边出现多余间距

    在设置代理前设置tableFooterView,上边会出现多余间距

    tableView = [[UITableView alloc]initWithFrame:CGRectZero style:UITableViewStyleGrouped];

    tableView.tableFooterView = [UIView new];

    tableView.delegate = self;

    tableView.dataSource = self;

    在设置代理后设置tableFooterView,上边不会出现多余间距

    tableView = [[UITableView alloc]initWithFrame:CGRectZero style:UITableViewStyleGrouped];

    tableView.delegate = self;

    tableView.dataSource = self;

    tableView.tableFooterView = [UIView new];

    可以通过第一个section上边多余间距处理的办法来解决因代码顺序导致的上述问题,所以这里建议要解决第一个section上边多余间距还是通过文章开头所说的解决办法更好

    在 Storyboard 中 0 代码搞定

    没用 Storyboard 的同学使用上面的代码就 OK 了; 而在 Storyboard 中可以 0 代码搞定这个事: 

    首先,在第一个 Section 的上面拖进来一个空 UIView 

    然后选中这个 UIView 的 Runtime Attributes 栏,添加一个frame的 KeyPath

    这样头部的间隔就乖乖的不见了: 

    刨根问底 UITableViewHeader 的猫腻

    为什么刚才说 0.1 和 CGFLOAT_MIN 是等效的呢?经过研究,这个高度值的影响大概是这样的:

    若传入的 height == 0,则 height 被设置成默认值

    若 height 小于屏幕半像素对应的高度,这个 header 不在另一个像素渲染

    半像素也就是1.0 / scale / 2.0,如在 @2x 屏上是 0.25

    直观的感受下,假如这个 height 被设置成 0.5 的样子:

    导航栏下面的阴影线看上去宽了 0.5 像素的,Done。

    参考文章

    0代码隐藏GroupedTableView上边多余的间隔

    UITableViewStyleGrouped类型的UITabelView使用技巧

    相关文章

      网友评论

          本文标题:UITableViewStyleGrouped模式下烦人的多余间

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