UITableView中關於viewForHeaderInSection的一點小坑

新手入門,在保持興趣的前提下,最直接的辦法就是照着例子手動敲一遍代碼,而後將示例跑起來,這樣能最直觀的看到效果。html

可是,通常的面向初學者的教程或實例,技術面都相對於淺顯,實現的效果也比較Low,就像開發商剛蓋出的房子同樣,也叫房子,但那是毛坯房。相對於有其餘語言開發經驗或項目經驗的初學者(Ps:例如我~)來講,每每會以點帶面,會主動去挖掘與教程相關的「姿式點」,想盡辦法用已掌握的新技能去將這些實例完善、擴展,想一次就作出精裝修的房子。又由於對於一門剛接觸的新語言,瞭解的不夠深刻,因此也會不免陷入一個個小坑中。ios

 

這兩天作的實例是編碼實現UITableView,仍是老樣子,不拖控件、不使用Auto Layout佈局,要求兼容蘋果不一樣分辨率的三種設備,暫不考慮iPad。app

 

功能很簡單,很容易就搞出來了。可是表頭很醜,看着很不爽,尋思着是否是給它弄好看一點。佈局

// 普通設置表頭
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
    return @"嬰幼兒奶粉品牌列表(默認表頭)";
}

以下圖:google

 

我想要作的是將表頭弄漂亮一點,增長一點自定義的元素,好比說加個小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,右邊是文字描述。可恰恰就是沒出來我想要的效果,不知道是什麼問題。在自定義表頭的方法裏面打日誌,發現程序根本就沒進去。。。spa

 

新手嘛,各類google, 找了好多資料後最後在stackoverflow.com上找到一個相似的問題,去看了官方文檔才明白是怎麼回事。3d

 

知道什麼問題就好辦了,老老實實去實現tableView:heightForHeaderInSection唄日誌

// 設置表頭的高度。若是使用自定義表頭,該方法必需要實現,不然自定義表頭沒法執行,也不會報錯
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 50;
}

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

相關文章
相關標籤/搜索