[不喜欢发功能贴,依然说一下遇到的一些“奇怪”问题吧]
问题是这样的:最近重构项目代码,从启动、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我们依旧没必要谈,如何去找到原因并解决才是需要,更重要的是找到感觉在以后的程序中尽量避开这些问题!也许这就是所谓的经验吧!