[不喜歡發功能貼,依然說一下遇到的一些“奇怪”問題吧]
問題是這樣的:最近重構項目代碼,從啟動、table到自定義撥號盤都改用storyBoard Xib布局UI。然而發現一個問題:xib下tableView的首行(section==0時)的自定義sectionHeaderView不顯示!查看日志發現,代理根本沒走section==0時的情況,這就怪了。各種高度值啊、注冊復用啊都有了,別的地方卻也都正常,唯有第一組的header是空的。
最后解決的辦法是:在代理里再次寫明
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
if (tableView==self.tableView) {
? ? ?return kCELL_H;
}else
? ? return 30.0;
}
可是還是疑問,為什么明明在xib屬性表里填好了高度值,為什么還會出bug,為什么是第二行以后都正常,為什么還要這樣寫明一下才都行?還有諸如為什么numberOfsectionsInTableView 要走N次!
但是有一點,Apple并沒有明說xib屬性列表能代替所有代理!也就是說,你沒寫清楚代理,但是你以為不用寫了。所以…你以為的只是你以為
? ? ?自Xcode5以來storyboard、Auto Layout、Size Classes功能更加完善,我明顯感覺蘋果更加推崇用xib布局UI。雖然曾經覺得自己手寫的代碼更好檢查、更可靠可控,事實上這些圖形化編程的確提高了開發效率,我本人也并不喜歡為了一隊基本的小控件而寫下冗長的布局代碼。于是,后來就主動去了解這些xib化布局 來重構簡化靜UI代碼,結合constraint約束條件來解決一些自適應布局,至少看上去代碼比之前清爽了不少。
然而,我們都知道程序里沒有完美的東西,xib能解決的代碼都能解決,xib不能解決的代碼也能解決。Xcode 和OS上的bug我們依舊沒必要談,如何去找到原因并解決才是需要,更重要的是找到感覺在以后的程序中盡量避開這些問題!也許這就是所謂的經驗吧!