最近笔者在公司的iOS开发中,有一个iOS开发同事跑来问了两个问题:1.给UITableView设置了组头和组尾视图,可是一直显示不出来?2.UITableView的section的header和footer视图,没有产品经理须要的悬停效果?针对于这2个问题,我详细的测试了一下,而后得出了以下结论。测试
针对于问题一,是由于对方建立UITableViewController的时候使用了错误的构造方法。若是用导航控制器pushUITableViewController类型的控制器,必须给定UITableView的style。以下所示,错误方式和正确方式:spa
// 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行)3d
图1 图2代理
同理,组头标题和组尾标题也是如此。下图3为plain样式的效果,图4为grouped样式的效果。code
注意:对于组头组尾视图,若是控制器是做为子控制器被push或者modal的。那么若是被push或者modal的UITableViewController为UITableViewStylePlain样式,那么很遗憾,依旧不会显示组头和组尾视图。因此只可以设置为UITableViewStyleGrouped样式。那么问题又来了,组头组尾视图是有了,可是不可以悬停。blog
对于组头组尾标题,无论控制器做为子控制器push或者modal出来的。UITableViewController为UITableViewStylePlain样式,会有悬停效果。若是被push的UITableViewController为UITableViewStyleGrouped样式,不会有悬停效果。开发