UITableView – 更改节标题颜色

我怎样才能改变UITableView中的节头的颜色?

编辑 : 由DJ-S提供的答案应该考虑iOS 6及以上。 接受的答案已过时。

希望从UITableViewDelegate协议的这个方法将让你开始:

Objective-C的:

 - (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { UIView *headerView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 30)] autorelease]; if (section == integerRepresentingYourSectionOfInterest) [headerView setBackgroundColor:[UIColor redColor]]; else [headerView setBackgroundColor:[UIColor clearColor]]; return headerView; } 

迅速:

 func tableView(_ tableView: UITableView!, viewForHeaderInSection section: Int) -> UIView! { let headerView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.bounds.size.width, height: 30)) if (section == integerRepresentingYourSectionOfInterest) { headerView.backgroundColor = UIColor.redColor() } else { headerView.backgroundColor = UIColor.clearColor() } return headerView } 

2017年更新:

Swift 3:

 func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { let headerView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.bounds.size.width, height: 30)) if (section == integerRepresentingYourSectionOfInterest) { headerView.backgroundColor = UIColor.red } else { headerView.backgroundColor = UIColor.clear } return headerView } 

用你想要的任何UIColorreplace[UIColor redColor] 。 你也可能希望调整headerView的尺寸。

这是一个老问题,但我认为答案需要更新。

此方法不涉及定义和创build您自己的自定义视图。 在iOS 6及更高版本中,通过定义可以轻松更改背景颜色和文本颜色

 -(void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section 

部分委托方法

例如:

 - (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section { // Background color view.tintColor = [UIColor blackColor]; // Text Color UITableViewHeaderFooterView *header = (UITableViewHeaderFooterView *)view; [header.textLabel setTextColor:[UIColor whiteColor]]; // Another way to set the background color // Note: does not preserve gradient effect of original header // header.contentView.backgroundColor = [UIColor blackColor]; } 

从我的post采取: https : //happyteamlabs.com/blog/ios-how-to-customize-table-view-header-and-footer-colors/

Swift 3

 func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int){ view.tintColor = UIColor.red let header = view as! UITableViewHeaderFooterView header.textLabel?.textColor = UIColor.white } 

以下是如何更改文字颜色。

 UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(10, 3, tableView.bounds.size.width - 10, 18)] autorelease]; label.text = @"Section Header Text Here"; label.textColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.75]; label.backgroundColor = [UIColor clearColor]; [headerView addSubview:label]; 

你可以这样做,如果你想自定义颜色的标题:

 [[UITableViewHeaderFooterView appearance] setTintColor:[UIColor redColor]]; 

从iOS 6.0开始,这个解决scheme很好用。

以下解决scheme适用于iOS 8+的Swift 1.2

 override func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) { // This changes the header background view.tintColor = UIColor.blueColor() // Gets the header view as a UITableViewHeaderFooterView and changes the text colour var headerView: UITableViewHeaderFooterView = view as! UITableViewHeaderFooterView headerView.textLabel.textColor = UIColor.redColor() } 

不要忘记从代理添加这段代码,否则在某些情况下,相对于视图/标签的高度,您的视图将会被剪切或出现在表格的后面。

 - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 30; } 

如果你不想创build自定义视图,你也可以像这样改变颜色(需要iOS 6):

 -(void) tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section { if ([view isKindOfClass: [UITableViewHeaderFooterView class]]) { UITableViewHeaderFooterView* castView = (UITableViewHeaderFooterView*) view; UIView* content = castView.contentView; UIColor* color = [UIColor colorWithWhite:0.85 alpha:1.]; // substitute your color here content.backgroundColor = color; } } 

设置区域的背景和文字颜色:(感谢William JockuschDj S

 - (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section { if ([view isKindOfClass: [UITableViewHeaderFooterView class]]) { UITableViewHeaderFooterView* castView = (UITableViewHeaderFooterView*) view; castView.contentView.backgroundColor = [UIColor grayColor]; [castView.textLabel setTextColor:[UIColor grayColor]]; } } 

在UITableViewHeaderFooterView上设置背景颜色已被弃用。 请改用contentView.backgroundColor

以下是如何在标题视图中添加图像:

 - (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { UIView *headerView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 30)] autorelease]; UIImageView *headerImage = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"top-gery-bar.png"]] autorelease]; headerImage.frame = CGRectMake(0, 0, tableView.bounds.size.width, 30); [headerView addSubview:headerImage]; return headerView; } 

你可以在main.storyboard上约2秒钟完成。

  1. select表格视图
  2. 转到属性检查器
  3. 列表项目
  4. 向下滚动到查看副标题
  5. 换背景”

看看这里

对于iOS8(Beta)和Swift,select你想要的RGB颜色并试试这个:

 override func tableView(tableView: UITableView!, viewForHeaderInSection section: Int) -> UIView! { var header :UITableViewHeaderFooterView = UITableViewHeaderFooterView() header.contentView.backgroundColor = UIColor(red: 254.0/255.0, green: 190.0/255.0, blue: 127.0/255.0, alpha: 1) return header 

}

(“覆盖”是因为我在我的项目中使用UITableViewController,而不是一个普通的UIViewController,但它不是强制更改节头颜色)

你的头文本仍然会被看到。 请注意,您将需要调整节标题高度。

祝你好运。

SWIFT 2

我能够成功地更改节背景色添加模糊效果(这真的很酷)。 轻松改变部分的背景颜色:

  1. 首先进入Storyboard并selectTable View
  2. 转到属性检查器
  3. 列表项目
  4. 向下滚动到查看
  5. 换背景”

然后为了模糊效果,添加到代码:

 override func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) { // This is the blur effect let blurEffect = UIBlurEffect(style: .Light) let blurEffectView = UIVisualEffectView(effect: blurEffect) // Gets the header view as a UITableViewHeaderFooterView and changes the text colour and adds above blur effect let headerView: UITableViewHeaderFooterView = view as! UITableViewHeaderFooterView headerView.textLabel!.textColor = UIColor.darkGrayColor() headerView.textLabel!.font = UIFont(name: "HelveticaNeue-Light", size: 13) headerView.tintColor = .groupTableViewBackgroundColor() headerView.backgroundView = blurEffectView } 

我知道它的答案,以防万一,在Swift中使用以下内容

  override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { let tableViewWidth = self.tableView.bounds let headerView = UIView(frame: CGRectMake(0, 0, tableViewWidth.size.width, self.tableView.sectionHeaderHeight)) headerView.backgroundColor = UIColor.greenColor() return headerView } 

iOS 8+

 func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) { tableView.tableHeaderView?.backgroundColor = UIColor.blue() } 

我有一个项目使用静态表格视图单元格,在iOS 7.x中。 willDisplayHeaderView不会触发。 但是,这种方法工作正常:

 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { NSLog(@"%s", __FUNCTION__); CGRect headerFrame = CGRectMake(x, y, w, h); UIView *headerView = [[UIView alloc] initWithFrame:headerFrame]; headerView.backgroundColor = [UIColor blackColor]; 
  -(void) tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section { if ([view isKindOfClass: [UITableViewHeaderFooterView class]]) { UITableViewHeaderFooterView *castView = (UITableViewHeaderFooterView *) view; UIView *content = castView.contentView; UIColor *color = [UIColor whiteColor]; // substitute your color here content.backgroundColor = color; [castView.textLabel setTextColor:[UIColor blackColor]]; } } 

我认为这个代码不是那么糟糕。

 func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { let headerView = tableView.dequeueReusableHeaderFooterViewWithIdentifier(MyHeaderView.reuseIdentifier) as MyHeaderView let backgroundView = UIView() backgroundView.backgroundColor = UIColor.whiteColor() headerView.backgroundView = backgroundView headerView.textLabel.text = "hello" return headerView } 

基于@Dj S答案,使用Swift 3.这在iOS 10上很好用。

 func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) { // Background color view.tintColor = UIColor.black // Text Color let headerView = view as! UITableViewHeaderFooterView headerView.textLabel?.textColor = UIColor.white } 

在iOS 7.0.4中,我用自己的XIB创build了一个自定义标题。 之前没有提到任何工作。 它必须是UITableViewHeaderFooterView的子类才能使用dequeueReusableHeaderFooterViewWithIdentifier:看起来这个类对于背景颜色是非常固执的。 所以最后我添加了名为customBackgroudView的UIView(你可以使用代码或IB),然后设置它的backgroundColor属性。 在layoutSubviews:我将该视图的框架设置为界限。 它与iOS 7一起工作,不会出现任何问题。

 // in MyTableHeaderView.xib drop an UIView at top of the first child of the owner // first child becomes contentView // in MyTableHeaderView.h @property (nonatomic, weak) IBOutlet UIView * customBackgroundView; // in MyTableHeaderView.m -(void)layoutSubviews; { [super layoutSubviews]; self.customBackgroundView.frame = self.bounds; } // if you don't have XIB / use IB, put in the initializer: -(id)initWithReuseIdentifier:(NSString *)reuseIdentifier { ... UIView * customBackgroundView = [[UIView alloc] init]; [self.contentView addSubview:customBackgroundView]; _customBackgroundView = customBackgroundView; ... } // in MyTableViewController.m -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { MyTableHeaderView * header = [self.tableView dequeueReusableHeaderFooterViewWithIdentifier:@"MyTableHeaderView"]; header.customBackgroundView.backgroundColor = [UIColor redColor]; return header; } 

使用RubyMotion / RedPotion,将其粘贴到您的TableScreen中:

  def tableView(_, willDisplayHeaderView: view, forSection: section) view.textLabel.textColor = rmq.color.your_text_color view.contentView.backgroundColor = rmq.color.your_background_color end 

奇迹般有效!

只要改变标题视图的层的颜色

 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
 {
   UIView * headerView = [[[UIView alloc] initWithFrame:CGRectMake(0,0,tableView.bounds.size.width,30)] autorelease];
  headerView.layer.backgroundColor = [UIColor clearColor] .CGColor
 }

如果有人需要快捷,请保留标题:

 override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { let view = UIView(frame: CGRect(x: 0,y: 0,width: self.tableView.frame.width, height: 30)) view.backgroundColor = UIColor.redColor() let label = UILabel(frame: CGRect(x: 15,y: 5,width: 200,height: 25)) label.text = self.tableView(tableView, titleForHeaderInSection: section) view.addSubview(label) return view } 

我通过控制台日志从Xcode获得消息

[TableView]在UITableViewHeaderFooterView上设置背景颜色已被弃用。 请设置一个自定义UIView所需的背景颜色,而不是backgroundView属性。

然后我只是创build一个新的UIView,并把它作为HeaderView的背景。 不是一个好的解决scheme,但Xcode说,这很容易。

就我而言,它是这样工作的:

 let headerIdentifier = "HeaderIdentifier" let header = self.tableView.dequeueReusableHeaderFooterView(withIdentifier: headerIdentifier) header.contentView.backgroundColor = UIColor.white