UITableViewStyleGrouped类型的UITabelView使用技巧

转发自:作者 Code_Ninja

我们知道使用UITableView的时候有个技巧:使用table.tableFooterView = [UIView new];一行代码可以解决UITableView在cell比较少的情况下不显示下面的分割线条How to remove empty cells in UITableView?
今天在使用UITableViewStyleGrouped类型的UITableView的时候又发现一个小技巧。
当设置UITableView为UITableViewStyleGrouped的时候,下面两段代码将导致不同的界面效果:

方式1:

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

  table.backgroundColor = [UIColor  clearColor];

  table.separatorColor = kLineColor;

  table.tableFooterView = [UIView new];

  table.delegate = self;

  table.dataSource = self;

方式1的效果图:

方式1效果图.png

方式2:

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

table.backgroundColor = [UIColor  clearColor];

table.separatorColor = kLineColor;

table.delegate = self;

table.dataSource = self;

table.tableFooterView = [UIView new];

方式2的效果图:

方式2的效果图.png

前提条件:

-(CGFloat)tableView:(UITableView*)tableView heightForHeaderInSection:(NSInteger)section
{
     return 10.f;
}

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

{
      return 0.01f;
}

我们看到代码顺序不同直接导致了界面显示不同。我们看到第一种情况,这什么鬼?

问题1:如何调整第一个section header 的默认高度

我相信肯定有不少人遇到过这种情况---怎么修改UITableViewStyleGrouped类型的UITableView的第一个sction header的默认高度?,然后网上各种搜怎么解决UITableViewStyleGrouped类型的UITableView的第一个section header的高度问题,然后你会搜到这种解决方案:

table.contentInset = UIEdgeInsetsMake(-25, 0, 0, 0);通过这行代码来将UITableView的第一个section header隐藏一部分上去。

通调整可以看到下面的效果,会比之前好多了,但是在实际使用过程中要达到精确的section header 高度,需要多次调整contentInset来看效果,颇为麻烦。

效果图.png

问题2:如何改变默认section footer 默认高度

在stackoverflow上面会有人告诉你,可以通过以下设置比0稍微大一点点的方式来改变section footer的高度。

-(CGFloat)tableView:(UITableView*)tableView heightForFooterInSection:(NSInteger)section
{
     return 0.01;
}

见:How to change height of grouped UITableView header?
How to hide first section header in UITableView (grouped style)

总结:

在使用UITableViewStyleGrouped类型UITableView的时候,要想去掉头部默认高度,建议使用以下代码:

table = [[UITableView alloc]initWithFrame:CGRectZero style:UITableViewStyleGrouped];
table.backgroundColor = [UIColor clearColor];
table.separatorColor = kLineColor;
table.delegate = self;
table.dataSource = self;
table.tableFooterView = [UIView new];

以及:

-(CGFloat)tableView:(UITableView*)tableView heightForHeaderInSection:(NSInteger)section
{
     return 10.f;
}

-(CGFloat)tableView:(UITableView*)tableView heightForFooterInSection:(NSInteger)section
{
     return 0.01f;
}

具体为什么table.tableFooterView = [UIView new];与
table.delegate = self;
table.dataSource = self;
顺序颠倒会导致UITableViewStyleGrouped类型UITableView的效果造成不一样的影响,对UITableViewStylePlain类型的UITableView却没有什么影响,看苹果官方文档中,对tableFooterView也没有做很详细的说明,我猜测是UITableViewStyleGrouped类型UITableView在runtime中做了特殊处理。

相比之下,第二种代码实现的方式更简单明了,只需要注意代码顺序即可。在前期没发现第二种实现方法,导致一直按照第一种方式折腾了好久,走了不少弯路,特做此记录,转载请注明出处。



2016-09-06更新

感谢 HYY在第七楼分享的更加直接粗暴的方法:

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

来实现去掉UITableViewStyleGrouped类型UITableView头部高度,但是为了调整分区之间的间距还是需要实现heightForFooterInSection方法的。

作者:Code_Ninja
链接:http://www.jianshu.com/p/6597b51e6098
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

时间: 2024-11-10 19:42:37

UITableViewStyleGrouped类型的UITabelView使用技巧的相关文章

UITableViewStyleGrouped 类型 tableView sectionHeader 高度问题

UITableViewStyleGrouped 类型的 tableView 在适配的时候出现很大的问题.记录一下 按照之前的方法,只需要执行以下的代码就能够很好的解决 section == 0 的时候,sectionHeader 的高度问题以及 section 间距的问题 tableView.delegate = self; tableView.dataSource = self; tableView.sectionFooterHeight = 0.01f; tableView.tableFoo

MySQL索引类型总结和使用技巧以及注意事项

      索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytable表: CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL ); 我们随机向里面插入了10000条记录,其中有一条:5555, admin. 在查找username="admin"的记录 SEL

MySQL索引类型总结和使用技巧

引用地址:http://www.jb51.net/article/49346.htm 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytable表: 复制代码 代码如下: CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT NULL  ); 我们随机向里面插入了10000条记录,其中有一条:5555, admin. 在查找username="admin"的记录 SELECT

Dynamic CRM 2013学习笔记(十七)JS读写各种类型字段方法及技巧

我们经常要对表单里各种类型的字段进行读取或赋值,下面列出各种类型的读写方法及注意事项: 1. lookup 类型 清空值 var state = Xrm.Page.getAttribute("new_state"); if (state != null) { Xrm.Page.getAttribute("new_state").setValue(null); } 读取值 var state = new Array(); state = Xrm.Page.getAtt

阶乘之和(防止int类型溢出的小技巧&计时函数)

计算前n个正整数阶乘之和的后六位: 注意点是,用一个int类型储存阶乘之和时,要防止溢出 一,在每一次处理阶乘(fa)或者阶乘之和(s)时,都对10^6取余,这样最终结果不变,还避免了越界 二,计时函数可以用来观察程序执行时间 用法: printf("%f",(double)clock()/CLOCKS_PER_SEC); 代码: #include"iostream" #include"ctime" using namespace std; in

Python正则匹配递归获得给出目录下的特定类型的文件小技巧

需求是酱的: 输入一个目录,这个目录包含检测目录的必备信息但不准确需要获得后加工一下,如给出目录:C:\Program Files\Common Files\DESIGNER,需要检测的目录是:C:\Program Files\Common Files\System,即从给出的目录中获取前面的信息,后面的补上的目录(System)是指定的.从E:\res\tmp目录中检测xml文件,返回xml文件的目录 代码如下: 1 import os 2 import re 3 pathlist = []

UITableViewStyleGrouped模式下烦人的多余间距

第一个section上边多余间距处理 // 隐藏UITableViewStyleGrouped上边多余的间隔 _tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, CGFLOAT_MIN)]; 每个section下边多余间距处理 // 隐藏UITableViewStyleGrouped下边多余的间隔 - (CGFloat)tableView:(UITableView *)tableView h

UITableViewStyleGrouped顶部留白问题

我这样创建, ? 1 2 self.tableView = [[UITableView alloc] initWithFrame:                       CGRectMake(0, 64, 320, 416)  style:UITableViewStyleGrouped]; 如下图:  坐标不变,把类型改成UITableViewStylePlain. ? 1 2 self.tableView = [[UITableView alloc] initWithFrame:    

5 个在 Linux 中管理文件类型和系统时间的有用命令

对于想学习 Linux 的初学者来说要适应使用命令行或者终端可能非常困难.由于终端比图形用户界面程序更能帮助用户控制 Linux 系统,我们必须习惯在终端中运行命令.因此为了有效记忆 Linux 不同的命令,你应该每天使用终端并明白怎样将命令和不同选项以及参数一同使用. 在 Linux 中管理文件类型和设置时间 请先查看我们 Linux 小技巧系列之前的文章: 5 个有趣的 Linux 命令行技巧 给新手的 10 个有用 Linux 命令行技巧 在这篇文章中,我们打算看看终端中 5 个和文件以及