UITableView的坑

样式

  • 当tableView的样式为UITableViewPlain时
    默认没有tableHeaderView,tableFooterView,sectionHeaderView,sectionFooterView。

  • 当tableView的样式为UITableViewGrouped时
    使用默认的高度设置tableHeaderView,tableFooterView,sectionHeaderView,sectionFooterView。

设置seciotnHeader或seciotnFooter的高度

1.使用属性设置seciotnHeader或seciotnFooter的高度

  • 当tableView的样式为UITableViewPlain时
    属性@property(nonatomic) CGFloat sectionHeaderHeight;@property(nonatomic) CGFloat sectionFooterHeight;都不起作用。

  • 当tabaleView的样式为UITableViewGrouped时
    属性@property(nonatomic) CGFloat sectionHeaderHeight;和属性@property(nonatomic) CGFloat sectionFooterHeight;才起作用。
    如果同时实现了代理方法tableView:heightForHeaderInSection:
    tableView:heightForFooterInSection:时,则代理方法会覆盖属性。

  • 当tableView的样式为UITableViewGrouped时
    当想设置header或footer的高度为0时,只能使用属性设置。
    使用代理方法tableView:heightForHeaderInSection:不起作用,系统会使用默认高度设置header或footer。

2.使用代理方法设置seciotnHeader或seciotnFooter的高度

  • 当tableView的样式是UITableViewPlain时,可以使用代理方法tableView:heightForHeaderInSection:tableView:heightForFooterInSection:设置header或footer高度

  • 当tableView的样式是UITableViewGrouped时,无法使用代理方法tableView:heightForHeaderInSection:tableView:heightForFooterInSection:设置header或footer的高度。

自定义sectionHeader或sectionFooter的视图

*只有实现了方法:tableView:heightForHeaderInSection:tableView:heightForFooterInSection:时,设置header或footer的方法tableView: viewForHeaderInSection:tableView: viewForFooterInSection:才起作用。

分割线

  • 当tableView的样式为UITableViewPlain时,table的各个cell的底部都有分割线。

  • 当tableView的样式为UITableViewPlain时,
    如果实现代理方法tableView:heightForHeaderInSection:时,
    section的最后一个footer会有分割线,其他的header和footer都没有分割线。

  • 如果实现代理方法tableView:heightForFooterInSection:时,section的header和footer都没有分割线。

  • 当tableView的样式为UITableViewGrouped时
    section的header和footer都有一条完整的分割线。

tableHeaderView和tableFooterView

  • 当tableView的样式为UITableViewStylePlain时,
    可以使用self.tableView.tableFooterView = [UIView new];设置tablefooterView。
    这能够删除tableView最底部的格外的分割线。

  • 当tableView的样式为UITableViewStyleGrouped时,self.tableView.tableFooterView = [UIView new];和self.tableView.tableHeaderView = [UIView new];不起作用。因为系统检测到高度为0时,会使用默认高度。

删除底部分割线

  • 当tableView的样式为UITableviewPlain时,
    tableView底部会有额外的分割线,有两种方法可以删除额外的分割线:
    1.设置seciotnfooterView,可以删除所有section的header和footer的分割线
    2.self.tableView.tableFooterView = [UIView new];删除底部分割线

sectionHeader和sectionFooter的浮动效果

  • tableView的样式为UITableViewStylePlain的时候,secitonHeader和sectionFooter会浮动,而在样式为UITableViewStyleGrouped的时候,则不会。

背景色

  • 当tableView的样式为UITableViewPlain时,tableView没有背景色。我并没有设置cell的背景色,但我明白cell为何会有一个白色的背景颜色。

  • 当tableView的样式为UITableViewGrouped时,tableView为所有的cell提供默认的背景颜色和背景视图。可以通过方法[UIColor groupTableViewBackgroundColor]来获得该背景颜色。
    背景视图为特定section中的所有cell提供可视分组

层次结构

  • 此外在tableView上,还有一个UITableViewWrapperView,UITableViewWrapperView之上才是我们的UITableViewCell。

你可能感兴趣的:(UITableView的坑)