iOS之UITableView组头组尾视图/标题悬停

补充 : 取消UITableView组头或者组尾的粘滞性 https://github.com/PSSDeveloper/bugDemo

之前在公司的iOS开发中,遇到了两个问题:1.给UITableView设置了组头和组尾视图,但是一直显示不出来?2.UITableView的section的header和footer视图,没有出现需要的悬停效果?

针对于问题一,是因为对方创建UITableViewController的时候使用了错误的构造方法。如果用导航控制器pushUITableViewController类型的控制器,必须给定UITableView的style。如下所示,错误方式和正确方式:

// UITableViewController错误创建方式:
    WSTableViewController *tableVC = [[WSTableViewController alloc] init];
    [self.navigationController pushViewController:tableVC animated:YES];

// UITableViewController正确创建方式:
    WSTableViewController *tableVC = [[WSTableViewController alloc] initWithStyle:UITableViewStyleGrouped];
    [self.navigationController pushViewController:tableVC animated:YES];

// 注意:很多初级iOS工程师创建UITableViewController的时候习惯用init,殊不知,UITableViewController与其他控制器不同,需要指定控制器的tableView的style。
// 另外,自定义UITableViewController需要重写init方法的时候,也不要傻乎乎的重写init方法,而是需要重写initWithStyle:方法。

针对于问题二,UITableView的style无论是plain还是grouped样式,都可以设置组头组尾视图(通过代理方法)。
但需要注意的是,如果UITableView的style设置为grouped样式,那么组头和组尾视图 没有 悬停效果。
相反,如果UITableView的style设置为plain样式,那么组头和组尾视图 会有 悬停效果。
如下图1为plain样式下的悬停效果;图2为grouped样式下的非悬停效果。(PS:下图中的UITableView分为3组,每组10行)

悬停效果.gif
非悬停效果.gif

同理,组头标题和组尾标题也是如此。下图3为plain样式的效果,图4为grouped样式的效果。

组头组尾悬停效果.gif
组头组尾非悬停效果.gif

注意:对于组头组尾视图,如果控制器是作为子控制器被push或者modal的。那么如果被push或者modal的UITableViewController为UITableViewStylePlain样式,那么很遗憾,依旧不会显示组头和组尾视图。所以只能够设置为UITableViewStyleGrouped样式。那么问题又来了,组头组尾视图是有了,但是不能够悬停。

对于组头组尾标题,不管控制器作为子控制器push或者modal出来的。UITableViewController为UITableViewStylePlain样式,会有悬停效果。如果被push的UITableViewController为UITableViewStyleGrouped样式,不会有悬停效果。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容