wake-up-neo.com

UITableView - Farbe der Abschnittskopfzeile ändern

Wie kann ich die Farbe eines Abschnittskopfs in UITableView ändern?

EDIT: Die Antwort von DJ-S sollte für iOS 6 und höher verwendet werden. Die akzeptierte Antwort ist veraltet.

297

Hoffentlich hilft Ihnen diese Methode aus dem UITableViewDelegate-Protokoll:

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

Swift:

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
}

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

Ersetzen Sie [UIColor redColor] durch die gewünschte UIColor. Sie können auch die Abmessungen von headerView anpassen.

376
Alex Reynolds

Dies ist eine alte Frage, aber ich denke, die Antwort muss aktualisiert werden.

Bei dieser Methode müssen Sie keine eigene benutzerdefinierte Ansicht definieren und erstellen ... In iOS 6 und höher können Sie die Hintergrundfarbe und die Textfarbe einfach ändern, indem Sie die 

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

abschnitt Delegatmethode 

Zum Beispiel:

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

Aus meinem Beitrag hier entnommen: https://happyteamlabs.com/blog/ios-how-to-customize-table-view-header-und-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
}
673
Dj S

So ändern Sie die Textfarbe:.

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

Sie können dies tun, wenn Sie eine Kopfzeile mit benutzerdefinierter Farbe wünschen:

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

Diese Lösung funktioniert seit iOS 6.0 hervorragend.

49
Leszek Zarna

Die folgende Lösung funktioniert für Swift 1.2 mit 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()

}
31
Max

Vergessen Sie nicht, diesen Code vom Delegaten hinzuzufügen, da sonst Ihre Ansicht abgeschnitten wird oder in einigen Fällen hinter der Tabelle angezeigt wird, bezogen auf die Höhe Ihrer Ansicht/Ihres Labels.

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

Wenn Sie keine benutzerdefinierte Ansicht erstellen möchten, können Sie die Farbe auch so ändern (erfordert 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;
    }
}
18

Das Festlegen der Hintergrundfarbe für UITableViewHeaderFooterView wurde nicht mehr empfohlen. Bitte verwenden Sie stattdessen contentView.backgroundColor.

16
Alex

Sie können es auf main.storyboard in ungefähr 2 Sekunden tun.

  1. Wählen Sie Table View
  2. Gehen Sie zum Attribut-Inspektor
  3. Listenpunkt
  4. Scrollen Sie nach unten zu Unterüberschrift Anzeigen 
  5. Hintergrund ändern"

 Have a look here

13
Steve

Legen Sie die Hintergrund- und Textfarbe des Abschnittsbereichs fest: (Danke an William Jockusch und Dj 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]];
    }
}
13

Swift 4

Um die Hintergrundfarbe , Beschriftungsfarbe und Schriftart für die Kopfansicht eines UITableView-Abschnitts zu ändern, überschreiben Sie einfach willDisplayHeaderView für Ihre Tabellenansicht wie folgt:

override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
        let header = view as! UITableViewHeaderFooterView
        header.backgroundView?.backgroundColor = .white
        header.textLabel?.textColor = .black
        header.textLabel?.font = UIFont(name: "Helvetica-Bold", size: 14)
} 

Das funktionierte perfekt für mich. hoffe es hilft dir auch!

11
Nii Mantse

So fügen Sie ein Bild in der Kopfansicht hinzu:

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

Wählen Sie für iOS8 (Beta) und Swift die gewünschte RGB-Farbe und versuchen Sie Folgendes:

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

}

(Das "Überschreiben" ist vorhanden, da ich in meinem Projekt den UITableViewController anstelle eines normalen UIViewControllers verwende, es ist jedoch nicht zwingend erforderlich, um die Farbe der Abschnittskopfzeile zu ändern.)

Der Text Ihrer Kopfzeile wird weiterhin angezeigt. Beachten Sie, dass Sie die Höhe der Abschnittskopfzeile anpassen müssen.

Viel Glück.

8
Corona

Swift 2

Ich konnte erfolgreich die Hintergrundfarbe des Abschnitts mit einem zusätzlichen Weichzeichnungseffekt ändern (was wirklich cool ist). So ändern Sie die Hintergrundfarbe des Abschnitts einfach:

  1. Gehen Sie zuerst zum Storyboard und wählen Sie die Tabellenansicht aus 
  2. Gehen Sie zum Attribut-Inspektor
  3. Listenpunkt
  4. Scrollen Sie nach unten zu Ansicht
  5. Hintergrund ändern"

Dann für Unschärfe-Effekt zum Code hinzufügen:

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

}
6
A.J. Hernandez

Ich weiß, dass es beantwortet wurde, nur für den Fall, dass In Swift Folgendes verwendet wird

    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
    }
5
arango_86

Basierend auf der Antwort von @Dj S unter Verwendung von Swift 3. Dies funktioniert hervorragend unter 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
}
4
tesla

iOS 8+

func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
        tableView.tableHeaderView?.backgroundColor = UIColor.blue()
}
4
Gentian Sadiku
 -(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]];
        }
 }
3
Vinoth

Ich habe ein Projekt, das statische Tabellensichtzellen in iOS 7.x verwendet. willDisplayHeaderView wird nicht ausgelöst. Diese Methode funktioniert jedoch in Ordnung:

- (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];
3
David DelMonte

Ich finde diesen Code nicht so schlecht.

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
}
3
mmtootmm

Wenn jemand Swift braucht, behält Titel:

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
}
2
Cmar

Ändern Sie einfach die Farbe der Ebene der Kopfansicht

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

2
Ramesh

In meinem Fall hat es so funktioniert:

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

In iOS 7.0.4 habe ich einen benutzerdefinierten Header mit seiner eigenen XIB erstellt. Nichts, was hier erwähnt wurde, funktionierte vorher. Es musste die Unterklasse von UITableViewHeaderFooterView sein, um mit dem dequeueReusableHeaderFooterViewWithIdentifier: zu arbeiten, und es scheint, dass die Klasse hinsichtlich der Hintergrundfarbe sehr hartnäckig ist. Schließlich habe ich eine UIView (mit Code oder IB) mit dem Namen customBackgroudView hinzugefügt und dann die backgroundColor-Eigenschaft festgelegt. In layoutSubviews: Ich habe den Rahmen dieser Ansicht auf Grenzen gesetzt. Es funktioniert mit iOS 7 und gibt keine Störungen.

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

Fügen Sie dies mit RubyMotion/RedPotion in Ihren TableScreen ein:

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

Klappt wunderbar!

1
Eli Duke

Legen Sie einfach die Hintergrundfarbe der Hintergrundansicht fest:

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

Ich habe eine Nachricht von Xcode über das Konsolenprotokoll erhalten

[TableView] Einstellung der Hintergrundfarbe auf UITableViewHeaderFooterView wurde nicht mehr unterstützt. Bitte legen Sie eine benutzerdefinierte UIView mit der gewünschten Hintergrundfarbe zur Hintergrundansicht stattdessen Eigentum.

Dann erstelle ich einfach ein neues UIView und lege es als Hintergrund für HeaderView . Keine gute Lösung, aber es ist einfach, wie Xcode sagte.

1
Pokotuz

Mit UIAppearance können Sie es für alle Header in Ihrer Anwendung folgendermaßen ändern:

UITableViewHeaderFooterView.appearance (). BackgroundColor = theme.subViewBackgroundColor

0
devjme

Obwohl func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) auch funktionieren wird, können Sie dies erreichen, ohne eine andere Delegat-Methode in Ihrer func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?-Methode zu implementieren. Sie können jedoch view.contentView.backgroundColor = UIColor.white anstelle von view.backgroundView?.backgroundColor = UIColor.white verwenden, der nicht funktioniert. (Ich weiß, dass backgroundView optional ist, aber selbst wenn es vorhanden ist, wird dies nicht geweckt, ohne willDisplayHeaderView zu implementieren.

0
gutte

Swift 4 macht es sehr einfach. Fügen Sie dies einfach Ihrer Klasse hinzu und legen Sie die Farbe nach Bedarf fest.

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

oder wenn eine einfache Farbe

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