序言
说起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也可以借鉴上面四种去选择
网友评论