10

i have pretty simple simple question (i hope so). How do i change the section header color in a UITableview from default blue to black transparent? Thanks in advance.

Simon D.
  • 525
  • 3
  • 6
  • 14
  • 1
    Here is a similar question: http://stackoverflow.com/questions/813068/uitableview-change-section-header-color – nylund Dec 01 '11 at 13:46

3 Answers3

21

This is an old question, but I think the answer needs to be updated.

This method does not involve defining your own custom views.
In iOS 6 and up, you can easily change the background color and the text color by defining the

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

For example:

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

Taken from my post here: https://happyteamlabs.com/blog/ios-how-to-customize-table-view-header-and-footer-colors/

Dj S
  • 10,232
  • 1
  • 21
  • 24
18

you need to implement this method in the UITableViewDelegate protocol:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

Here is a link to the documentation

... and do something like this (sub in your own color):

UIView *sectionView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 22)] autorelease];
[sectionView setBackgroundColor:[UIColor blackColor]];
return sectionView;

You can also use the section integer to alternate colors or something similar. I think the default height for the sections is 22, but you can make it whatever you want. Is this what you meant by your question? Hope this helps.

ingh.am
  • 25,981
  • 43
  • 130
  • 177
Ryan Ferretti
  • 2,891
  • 2
  • 27
  • 37
  • Thanks, i thought there would some kind of trigger in IB to switch to black color. But anyway, thanks. – Simon D. Mar 05 '10 at 22:20
  • 1
    But please, cache those views. There is bug in UIKit causing to ask for header views when the tableView is being scrolled, so this method will get called for every pixel-offset while scrolling. 22px is indeed the default height. – Joost Mar 05 '10 at 22:25
  • 1
    hi, i understand this method gets called when scrolling takes place... how can we cache this so to save unnecessary views being created etc..? if you could post a comment or an update to your post it will be very helpful. thank you – Pavan Aug 29 '12 at 14:20
0
- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
   {
     UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0,tableView.bounds.size.width, 30)];
     if (section == 0)
     [headerView setBackgroundColor:[UIColor redColor]];
     else 
     [headerView setBackgroundColor:[UIColor clearColor]];
     return headerView;
   }
Arash Zeinoddini
  • 801
  • 13
  • 19