美文网首页iOS开发代码段上海恩美路演UI
实现UITableviewCell之间的间距

实现UITableviewCell之间的间距

作者: KermitX | 来源:发表于2016-04-08 09:47 被阅读7133次

系统的TableviewCell之间是没有间距的,我们没法改变,那应该怎么来实现呢?
方式1:
通过设置cell的contentView来实现间接,在cell的contentView的顶部或者底部留下一定的间距,这样就会有cell间就有间距的效果。但是这种方式在cell有点击效果的时候,会很明显的看出有分层,因为这时候cell是被点击的,contentView都会有系统点击的阴影效果。这种方式在cell左滑删除,置顶等操作的时候,左滑出的视图会高出一部分(左滑显示出的高度=(cell的高度-留下的间距高度)+ 留下的间距高度[我们不需要的])


图片1.png

方式2:
通过分组的方式间接的实现,每组的Header可以当做是cell之间的间距,每组中只有一个cell(数据显示也会比较简单的)。废话不多说上代码!

#pragma mark - UITableViewDataSource,UITableViewDelegate
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 10;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return 10;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 1;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 100;
}
图片2 每组的Header会停留在tableview的顶部.gif

但是呢,这还是会出现一个问题,因为系统默认分组的时候每组的Header会停留在tableview的顶部,这要怎么处理呢?

//去掉UItableview headerview黏性(sticky)
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if (scrollView == self.tableView)
    {
        CGFloat sectionHeaderHeight = 10; //sectionHeaderHeight
        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);
            
        }
    }
}
取消UItableview headerview黏性

相关文章

网友评论

  • 李小南:楼主你好, 请问左滑出现类似删除按钮的时候, 怎么取消左滑的弹簧效果呢
  • 1499dbb9aa74:把tableview的style设置成grouped,也能实现啊
    再实现下面的方法就可以了啊
    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    if section == 0 {
    return 0.1
    }

    return 10
    }

    func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return 0.1
    }
  • 地瓜番薯:你好,有demo可以github下载吗?谢谢
    地瓜番薯:@KermitKangxu 比较欣赏你做的产品
    地瓜番薯:好的,谢谢
    KermitX:@地瓜番薯 代码整合在项目中的,没有单独拿出来,上面的说的还是比较详细的,要是不明白的话,具体哪里不好理解,再和你详细说说 :blush:
  • baidaokun:重写cell的setFrame方法调整即可
    超_iOS: @KermitKangxu 明天试试
    KermitX:@小菜超 xib也是可以的
    超_iOS:@风暴之灵 这倒是听说过,这样用xib写的是不是就不行了?
  • __Jason__:改变tableView的类型 就可以了,系统默认是 plan 改成 group ,分组头 sectionHeadView 就会跟随着滑动了
    Super_龙:确实就用group就完全能够实现, 如果你觉得丑可以自己编辑中间的缝隙多大, 或者自定义返回缝隙的view视图的. group类型在顶部是不逗留的
    遗编絶简:@__Jason__ 分组的tableview太丑,基本没人用
    KermitX:@__Jason__ 头部是会滚动,但是会在顶部固定留下一个header的

本文标题:实现UITableviewCell之间的间距

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