UITableView - 更改节标题颜色

时间:2009-05-01 20:14:36

标签: ios uitableview cocoa-touch

如何在UITableView中更改节标题的颜色?

编辑:iOS 6及更高版本应考虑answer provided by DJ-S。接受的答案已经过时了。

34 个答案:

答案 0 :(得分:687)

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

此方法不涉及定义和创建自己的自定义视图。 在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];
}

取自我的帖子: https://happyteamlabs.com/blog/ios-how-to-customize-table-view-header-and-footer-colors/

Swift 3/4

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

答案 1 :(得分:382)

希望UITableViewDelegate协议中的此方法可以帮助您入门:

<强>目标-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年更新:

斯威夫特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
    }

[UIColor redColor]替换为您想要的UIColor。您可能还希望调整headerView的尺寸。

答案 2 :(得分:97)

以下是更改文字颜色的方法。

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

答案 3 :(得分:49)

如果您想要具有自定义颜色的标题,则可以执行此操作:

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

此解决方案自iOS 6.0以来运行良好。

答案 4 :(得分:31)

以下解决方案适用于 Swift 1.2 with iOS 8 +

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()

}

答案 5 :(得分:21)

不要忘记从代理中添加这段代码,否则在某些情况下,相对于视图/标签的高度,您的视图将被截断或显示在桌子后面。

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

答案 6 :(得分:18)

如果您不想创建自定义视图,还可以更改颜色(需要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;
    }
}

答案 7 :(得分:16)

不推荐在UITableViewHeaderFooterView上设置背景颜色。请改用contentView.backgroundColor

答案 8 :(得分:16)

你可以在大约2秒内在main.storyboard上进行。

  1. 选择表格视图
  2. 转到属性检查器
  3. 列表项
  4. 向下滚动至查看副标题
  5. 更改“背景”
  6. Have a look here

答案 9 :(得分:13)

设置部分区域的背景和文字颜色:(感谢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]];
    }
}

答案 10 :(得分:11)

Swift 4

要更改UITableView部分的标题视图的背景颜色文本标签颜色字体,只需覆盖{{1}对于你的表视图如此:

willDisplayHeaderView

这对我很有用;希望它对你也有帮助!

答案 11 :(得分:10)

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

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

答案 12 :(得分:8)

快速5 +

willDisplayHeaderView方法中

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {

     //For Header Background Color
     view.tintColor = .black

    // For Header Text Color
    let header = view as! UITableViewHeaderFooterView
    header.textLabel?.textColor = .white
}

希望对您有所帮助:]

答案 13 :(得分:8)

对于iOS8(Beta)和Swift,选择你想要的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,但它不是必须更改节标题颜色)

仍会看到标题的文字。 请注意,您需要调整节标题高度。

祝你好运。

答案 14 :(得分:6)

SWIFT 2

我能够通过添加模糊效果(非常酷)成功更改部分背景颜色。要轻松更改部分的背景颜色:

  1. 首先转到Storyboard并选择Table View
  2. 转到属性检查器
  3. 列表项
  4. 向下滚动至查看
  5. 更改“背景”
  6. 然后对于模糊效果,添加到代码:

    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
    
    }
    

答案 15 :(得分:5)

我知道它的回答,以防万一,在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
    }

答案 16 :(得分:4)

基于@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
}

答案 17 :(得分:4)

iOS 8 +

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

答案 18 :(得分:3)

对我来说,在浪费了 2 个小时之后,以上都不起作用,这是解决方案。就我而言,它是自定义视图,但由于某种原因,我无法从故事板和视图的awakeFromNib 更改它。

override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
        let header = view as! UITableViewHeaderFooterView
        header.contentView.backgroundColor = .white
    }

答案 19 :(得分:3)

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

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
}

答案 20 :(得分:3)

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

答案 21 :(得分:3)

我在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];

答案 22 :(得分:2)

只需更改标题视图图层的颜色

即可
- (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
}

答案 23 :(得分:2)

如果有人需要迅速,请保留标题:

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
}

答案 24 :(得分:2)

就我而言,它的工作原理如下:

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

答案 25 :(得分:2)

在iOS 7.0.4中,我使用自己的XIB创建了一个自定义标头。之前没有提到任何事情。它必须是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;
}

答案 26 :(得分:1)

使用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

像魅力一样!

答案 27 :(得分:1)

我通过控制台日志从Xcode收到消息

  

[TableView]设置背景颜色   UITableViewHeaderFooterView已被弃用。请设置自定义   UIView用你想要的backgroundView背景颜色   财产而不是。

然后我创建一个新的UIView并将其作为HeaderView的背景。 Xcode表示,这不是一个好的解决方案,但很容易。

答案 28 :(得分:1)

只需设置背景视图的背景颜色:

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int){         
  let tableHeader = view as! UITableViewHeaderFooterView        
  tableHeader.backgroundView?.backgroundColor = UIColor.white     
}

答案 29 :(得分:1)

如果您使用自定义标题视图:

class YourCustomHeaderFooterView: UITableViewHeaderFooterView { 

override func awakeFromNib() {
    super.awakeFromNib()
    self.contentView.backgroundColor = .white //Or any color you want
}

}

答案 30 :(得分:0)

尽管func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int)也可以正常工作,但您可以在不实现其他委托方法的情况下实现此目的。 在func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?方法中,您可以使用view.contentView.backgroundColor = UIColor.white代替view.backgroundView?.backgroundColor = UIColor.white,而不是backgroundView。 (我知道willDisplayHeaderView是可选的,但即使它在那里,如果不实施{ timestamp_hour: ISODate("xxx"), userid: "xxx", type: "xxx", balances: { 1: {input: 100, output: 200}, 2: {input: 200, output: 300}, 500: {input: 5000, output: 5500}, ... } }

也不会

答案 31 :(得分:0)

使用UIAppearance,您可以为应用程序中的所有标题更改它,如下所示:

UITableViewHeaderFooterView.appearance()。backgroundColor = theme.subViewBackgroundColor

答案 32 :(得分:0)

Swift 4使其非常容易。只需将其添加到您的班级并根据需要设置颜色即可。

override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
        view.backgroundColor = UIColor(red: 0.094, green: 0.239, blue: 0.424, alpha: 1.0)
    }

或者是简单的颜色

override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
        view.backgroundColor = UIColor.white
    }

答案 33 :(得分:0)

iOS 13>迅捷5

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {view.tintColor = UIColor.red }