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;
}

這下好了,我要的效果出來了~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM