UITableView中关于viewForHeaderInSection的一点小坑

新手入门,在保持兴趣的前提下,最直接的办法就是照着例子手动敲一遍代码,然后将示例跑起来,这样能最直观的看到效果。

但是,一般的面向初学者的教程或实例,技术面都相对于浅显,实现的效果也比较Low,就像开发商刚盖出的房子一样,也叫房子,但那是毛坯房。相对于有其他语言开发经验或项目经验的初学者(Ps:例如我~)来说,往往会以点带面,会主动去挖掘与教程相关的“姿势点”,想尽办法用已掌握的新技能去将这些实例完善、扩展,想一次就做出精装修的房子。又因为对于一门刚接触的新语言,了解的不够深入,所以也会难免陷入一个个小坑中。

 

这两天做的实例是编码实现UITableView,还是老样子,不拖控件、不使用Auto Layout布局,要求兼容苹果不同分辨率的三种设备,暂不考虑iPad。

 

功能很简单,很容易就搞出来了。但是表头很丑,看着很不爽,寻思着是不是给它弄好看一点。

// 普通设置表头
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
    return @"婴幼儿奶粉品牌列表(默认表头)";
}

如下图:

我想要做的是将表头弄漂亮一点,增加一点自定义的元素,比如说加个小icon,加个背景色什么的。

复制代码
// 自定义表头
- (UIView*) tableView:(UITableView *)_tableView viewForHeaderInSection:(NSInteger)section {
    UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, _tableView.frame.size.width, 50)];
    // left icon
    UIImageView *icon = [[UIImageView alloc] initWithFrame:CGRectMake(5, 5, 40, 40)];
    icon.image = [UIImage imageNamed:@"250x250"];// right text
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(45, 0, _tableView.frame.size.width-50, 50)];
    label.textColor = [UIColor orangeColor];
    label.text = @"婴幼儿奶粉品牌列表(自定义表头)";
    label.textAlignment = NSTextAlignmentCenter;// 消息方式设置背景色(UIColor最后要转成CGColor类型)
    [headerView.layer setBackgroundColor:[UIColor colorWithRed:230.0/255.0 green:230.0/255.0 blue:250.0/255.0 alpha:1].CGColor];
    // 属性方式设置背景色
    //headerView.backgroundColor = [UIColor colorWithRed:230.0/255.0 green:230.0/255.0 blue:250.0/255.0 alpha:1];

    [headerView addSubview:icon];
    
    [headerView addSubview:label];
    
    return headerView;
}
复制代码

原以为到这里,差不多就实现我想的效果:表头左边有个小icon,右边是文字描述。可偏偏就是没出来我想要的效果,不知道是什么问题。在自定义表头的方法里面打日志,发现程序根本就没进去。。。

 

新手嘛,各种google, 找了好多资料后最后在stackoverflow.com上找到一个类似的问题,去看了官方文档才明白是怎么回事。

 

知道什么问题就好办了,老老实实去实现tableView:heightForHeaderInSection呗

// 设置表头的高度。如果使用自定义表头,该方法必须要实现,否则自定义表头无法执行,也不会报错
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 50;
}

这下好了,我要的效果出来了~

anyShare分享到: