最近筆者在公司的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樣式,不會有懸停效果。開發