Wie kann ich die Farbe eines Abschnittskopfes in UITableView ändern?
BEARBEITEN : Die Antwort von DJ-S sollte für iOS 6 und höher berücksichtigt werden. Die akzeptierte Antwort ist veraltet.
Wie kann ich die Farbe eines Abschnittskopfes in UITableView ändern?
BEARBEITEN : Die Antwort von DJ-S sollte für iOS 6 und höher berücksichtigt werden. Die akzeptierte Antwort ist veraltet.
Antworten:
Hoffentlich diese Methode aus dem UITableViewDelegate
Protokoll beginnen:
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;
}
Schnell:
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 was auch immer UIColor
Sie möchten. Möglicherweise möchten Sie auch die Abmessungen von anpassen headerView
.
[UIColor xxxColor]
jedoch gut, wenn ich eine benutzerdefinierte Farbe probiere, wie ich sie von Photoshop erhalten kann (mit der UIColor red:green:blue:alpha:
ist sie also nur weiß. Mache ich etwas falsch?
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 definieren
-(void)tableView:(UITableView *)tableView
willDisplayHeaderView:(UIView *)view
forSection:(NSInteger)section
Abschnitt delegieren Methode
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];
}
Entnommen aus meinem Beitrag hier: https://happyteamlabs.com/blog/ios-how-to-customize-table-view-header-and-footer-colors/
Schnelles 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
}
header.contentView.backgroundColor = [UIColor blackColor];
Option Ihnen einen undurchsichtigen Header geben
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];
Sie können dies tun, wenn Sie eine Kopfzeile mit einer benutzerdefinierten Farbe wünschen:
[[UITableViewHeaderFooterView appearance] setTintColor:[UIColor redColor]];
Diese Lösung funktioniert seit iOS 6.0 hervorragend.
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()
}
Vergessen Sie nicht, diesen Code vom Delegaten hinzuzufügen, da sonst Ihre Ansicht in einigen Fällen im Verhältnis zur Höhe Ihrer Ansicht / Beschriftung abgeschnitten wird oder hinter der Tabelle angezeigt wird.
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 30;
}
Wenn Sie keine benutzerdefinierte Ansicht erstellen möchten, können Sie die Farbe auch folgendermaßen ä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;
}
}
Stellen Sie den Hintergrund und die Textfarbe des Abschnittsbereichs ein: (Dank 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]];
}
}
Swift 4
Um die zu ändern Hintergrundfarbe , Textbeschriftung Farbe und Schriftart für die Header - Ansicht eines UITableView Abschnitts, außer Kraft setzt 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 hat bei mir perfekt funktioniert; hoffe es hilft dir auch!
So fügen Sie ein Bild in der Kopfzeile 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;
}
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
}}
(Die "Überschreibung" ist vorhanden, da ich in meinem Projekt den UITableViewController anstelle eines normalen UIViewControllers verwende, aber es ist nicht zwingend erforderlich, um die Farbe der Abschnittsüberschriften zu ändern.)
Der Text Ihrer Kopfzeile wird weiterhin angezeigt. Beachten Sie, dass Sie die Höhe der Abschnittsüberschriften anpassen müssen.
Viel Glück.
SWIFT 2
Ich konnte die Hintergrundfarbe des Abschnitts erfolgreich mit einem zusätzlichen Unschärfeeffekt ändern (was wirklich cool ist). So ändern Sie die Hintergrundfarbe des Abschnitts einfach:
Fügen Sie dann für den Unschärfeeffekt dem Code hinzu:
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
}
Ich weiß, dass es beantwortet wird, nur für den Fall, dass Sie in Swift Folgendes verwenden
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()
}
Basierend auf der Antwort von @Dj S mit 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
}
Ich habe ein Projekt mit statischen Tabellenansichtszellen in iOS 7.x. 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];
-(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]];
}
}
Ich denke, dieser Code ist 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
}
Swift 4 macht es sehr einfach. Fügen Sie dies einfach Ihrer Klasse hinzu und stellen Sie die Farbe nach Bedarf ein.
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
}
Aktualisiert für Swift 5
override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
view.tintColor = 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.tintColor = UIColor.white
}
In iOS 7.0.4 habe ich einen benutzerdefinierten Header mit einem eigenen XIB erstellt. Nichts, was hier zuvor erwähnt wurde, hat funktioniert. Es musste die Unterklasse von UITableViewHeaderFooterView sein, um mit dem zu arbeiten, dequeueReusableHeaderFooterViewWithIdentifier:
und es scheint, dass die Klasse in Bezug auf die Hintergrundfarbe sehr hartnäckig ist. Schließlich habe ich eine UIView (Sie können dies entweder mit Code oder IB tun) 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;
}
Ändern Sie einfach die Farbe der Ebene der Kopfansicht
- (UIView *) tableView: (UITableView *) tableView viewForHeaderInSection: (NSInteger) Abschnitt { UIView * headerView = [[[UIView-Zuweisung] initWithFrame: CGRectMake (0, 0, tableView.bounds.size.width, 30)] autorelease]; headerView.layer.backgroundColor = [UIColor clearColor] .CGColor }}
Wenn jemand schnell 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
}
Ich habe eine Nachricht von Xcode über das Konsolenprotokoll erhalten
[TableView] Das Festlegen der Hintergrundfarbe in UITableViewHeaderFooterView ist veraltet. Bitte setzen Sie stattdessen eine benutzerdefinierte UIView mit Ihrer gewünschten Hintergrundfarbe auf die Eigenschaft backgroundView.
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.
In meinem Fall hat es so funktioniert:
let headerIdentifier = "HeaderIdentifier"
let header = self.tableView.dequeueReusableHeaderFooterView(withIdentifier: headerIdentifier)
header.contentView.backgroundColor = UIColor.white
Stellen Sie einfach die Hintergrundfarbe der Hintergrundansicht ein:
func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int){
let tableHeader = view as! UITableViewHeaderFooterView
tableHeader.backgroundView?.backgroundColor = UIColor.white
}
Für schnelle 5 +
In willDisplayHeaderView
Methode
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! UITableHeaderFooterView
header.textLabel?.textColor = .white
}
Ich hoffe das hilft dir :]
Obwohl dies func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int)
auch funktioniert, können Sie dies erreichen, ohne eine andere Delegatmethode zu implementieren. In Ihrer func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
Methode können Sie view.contentView.backgroundColor = UIColor.white
stattdessen verwenden, view.backgroundView?.backgroundColor = UIColor.white
was nicht funktioniert. (Ich weiß, dass dies backgroundView
optional ist, aber selbst wenn es vorhanden ist, wird dies nicht ohne Implementierung aktiviertwillDisplayHeaderView