tableView的section和row

作者: 大脸猫l | 来源:发表于2017-01-23 23:31 被阅读206次

    序言

    说起tableView,大家都不陌生,但是说起tableView的section和row,对其概念总是很模糊,什么不要线、设置线宽度、sectionHeader高度等等,有时还真得花一些时间去调试,总的说来,还是对tableView这些细节不太熟悉,下面我总结了一些小细节,希望对大家有所帮助

    先看UITableViewStylePlain

    1.一个section:两个cell之间的行间距无法改变
    2.多个section:能改变两个相邻section的相邻cell之间的高度,即区头和区尾高度
    3.cell默认是整个tableView都有分隔线的,即系统默认属性是

    _tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
    

    所以要想去掉分隔线,一般是

    _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    

    但是此时你会发现有内容的cell分隔线也没了,对于有内容的cell,我们一般是保留其分隔线的,不用急,往下看
    4.上面说了,系统默认是

    _tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
    

    如果我们不手动去调用separatorStyle这个属性,cell之间是有线的,这时可以设置heightForFooterInSection和heightForHeaderInSection,值得注意的是,如果最底部区尾高度设置为0,下面无内容的cell的分隔线是去不掉的,所以只要给区尾设置一个高度即可去掉分隔线,同时保留有内容的cell的分隔线,至于区头和区尾设置多高根据需求而定
    5.多个section有多个区头和区尾,如果设置区头过高,当你往上滑动时,区头也会往上移动,但是如果达到了tableView顶端,会发现第一个区头会停留在顶端,不再随cell移动而往上移动,但是你再往下拉,会随tableView滑动而下来,如果在自定义headerView时,如果想要这种效果,完全可以这么做
    6.不设置相邻区头和区尾高度或者设置为0,在UITableViewCellSeparatorStyleSingleLine情况下,两个section之间的高度默认是分割线的高度
    7.设置cell分隔线的宽度
    宽度为0:

    if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
        [cell setSeparatorInset:UIEdgeInsetsMake(0, 0, 0, ScreenWidth)];
    }
    

    屏幕宽度:

    if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
        [cell setSeparatorInset:UIEdgeInsetsZero];
    }
    if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
        [cell setLayoutMargins:UIEdgeInsetsZero];
    }
    

    小贴士:没有数据时,记得去掉分隔线哦,不然会有可能会有一条线在上面

    再看UITableViewStyleGrouped

    1.系统默认UITableViewCellSeparatorStyleSingleLine,但不会出现多余的分隔线
    2.如果不设置区头和区尾高度,或者设置为0,区头和区尾均为默认高度,大概为15
    3.区头或者区尾高度设置成很小貌似不行,比如0.001,运行出来的效果还是差不多1的高度
    4.区头和区尾会一直随着tableView滚动,不会停留在顶部或底部

    总结

    在有规律的列表中,我们可以有四种选择布局,假如数据源数组为array
    1.plain:返回section数为array.count 每组一个row 可以精确的改变两个cell之间的高度 但是区头会停留在顶部,需要做判断解决第一个区头高度问题
    2.plain:返回section数为1 共array.count个row 无法改变两个cell之间的高度
    3.grouped:返回section数为array.count 每组一个row 即使区头和区尾之间高度给的再小,高度依然接近于1
    4.grouped:返回section数为1 共array.count个row 无法改变两个cell之间的高度
    具体哪种按需求去选择

    复杂的tableView也可以借鉴上面四种去选择

    相关文章

      网友评论

        本文标题:tableView的section和row

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