Como posso alterar a cor de um cabeçalho de seção no UITableView?
EDIT : A resposta fornecida pelo DJ-S deve ser considerada para o iOS 6 e superior. A resposta aceita está desatualizada.
Como posso alterar a cor de um cabeçalho de seção no UITableView?
EDIT : A resposta fornecida pelo DJ-S deve ser considerada para o iOS 6 e superior. A resposta aceita está desatualizada.
Respostas:
Esperamos que este método do UITableViewDelegate
protocolo o inicie:
Objetivo-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;
}
Rápido:
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
}
Atualizado 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
}
Substitua [UIColor redColor]
pelo que UIColor
você desejar. Você também pode querer ajustar as dimensões de headerView
.
[UIColor xxxColor]
no entanto, quando tento uma cor personalizada como que eu posso começar a partir de photoshop (isso usando o UIColor red:green:blue:alpha:
, é apenas branco Estou fazendo algo errado.?
Esta é uma pergunta antiga, mas acho que a resposta precisa ser atualizada.
Este método não envolve a definição e a criação de sua própria visualização personalizada. No iOS 6 e superior, você pode alterar facilmente a cor do plano de fundo e a cor do texto, definindo o
-(void)tableView:(UITableView *)tableView
willDisplayHeaderView:(UIView *)view
forSection:(NSInteger)section
método delegado de seção
Por exemplo:
- (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];
}
Retirado do meu post aqui: 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
}
header.contentView.backgroundColor = [UIColor blackColor];
opção fornecerá um cabeçalho opaco #
Veja como alterar a cor do texto.
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];
Você pode fazer isso se desejar um cabeçalho com cor personalizada:
[[UITableViewHeaderFooterView appearance] setTintColor:[UIColor redColor]];
Esta solução funciona muito bem desde o iOS 6.0.
A solução a seguir funciona no Swift 1.2 com iOS 8 ou superior
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()
}
Não se esqueça de adicionar esse código ao delegado ou, em alguns casos, sua visualização será cortada ou, por vezes, exibida atrás da tabela, em relação à altura da visualização / etiqueta.
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 30;
}
Se você não deseja criar uma visualização personalizada, também pode alterar a cor desta forma (requer 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;
}
}
Defina a cor do plano de fundo e do texto da área de seção: (Agradecimentos a William Jockusch
e 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
Para alterar a cor do plano de fundo , a cor do rótulo de texto e a fonte da Visualização do cabeçalho de uma seção UITableView, substitua simplesmente willDisplayHeaderView
a visualização da tabela da seguinte maneira:
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)
}
Isso funcionou perfeitamente para mim; espero que ajude você também!
Veja como adicionar uma imagem na exibição de cabeçalho:
- (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;
}
Para iOS8 (Beta) e Swift, escolha a cor RGB desejada e tente o seguinte:
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
}
(A "substituição" existe desde que eu estou usando o UITableViewController em vez de um UIViewController normal no meu projeto, mas não é obrigatório alterar a cor do cabeçalho da seção)
O texto do seu cabeçalho ainda será visto. Observe que você precisará ajustar a altura do cabeçalho da seção.
Boa sorte.
SWIFT 2
Consegui alterar com êxito a cor de fundo da seção com um efeito de desfoque adicional (o que é muito legal). Para alterar facilmente a cor de fundo da seção:
Em seguida, para efeito de desfoque, adicione ao código:
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
}
Eu sei que é respondido, apenas no caso, In Swift use o seguinte
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 ou superior
func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
tableView.tableHeaderView?.backgroundColor = UIColor.blue()
}
Com base na resposta do @Dj S, usando o Swift 3. Isso funciona muito bem no 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
}
Eu tenho um projeto usando células de exibição de tabela estática, no iOS 7.x. O willDisplayHeaderView não é acionado. No entanto, este método funciona bem:
- (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]];
}
}
Eu acho que esse código não é tão ruim.
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 facilita muito. Basta adicionar isso à sua turma e definir a cor conforme necessário.
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)
}
ou se uma cor simples
override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
view.backgroundColor = UIColor.white
}
Atualizado para o 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)
}
ou se uma cor simples
override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
view.tintColor = UIColor.white
}
No iOS 7.0.4, criei um cabeçalho personalizado com seu próprio XIB. Nada mencionado aqui antes funcionou. Tinha que ser a subclasse do UITableViewHeaderFooterView para trabalhar com o dequeueReusableHeaderFooterViewWithIdentifier:
e parece que a classe é muito teimosa em relação à cor do plano de fundo. Então, finalmente, adicionei um UIView (você pode fazê-lo com código ou IB) com o nome customBackgroudView e, em seguida, defina sua propriedade backgroundColor. Em layoutSubviews: defino os limites dessa exibição como limites. Ele funciona com o iOS 7 e não oferece falhas.
// 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;
}
Apenas mude a cor da camada da vista do cabeçalho
- (UIView *) tableView: (UITableView *) tableView viewForHeaderInSection: (NSInteger) seção { UIView * headerView = [[[alocação de UIView] initWithFrame: CGRectMake (0, 0, tableView.bounds.size.width, 30)] autorelease]; headerView.layer.backgroundColor = [UIColor clearColor] .CGColor }
Se alguém precisar de agilidade, mantenha o título:
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
}
Recebi uma mensagem do Xcode através do log do console
[TableView] A configuração da cor de plano de fundo no UITableViewHeaderFooterView foi preterida. Em vez disso, defina um UIView personalizado com a cor de fundo desejada para a propriedade backgroundView.
Depois, apenas crio um novo UIView e o coloco como plano de fundo do HeaderView. Não é uma boa solução, mas fácil como o Xcode disse.
No meu caso, funcionou assim:
let headerIdentifier = "HeaderIdentifier"
let header = self.tableView.dequeueReusableHeaderFooterView(withIdentifier: headerIdentifier)
header.contentView.backgroundColor = UIColor.white
Basta definir a cor do plano de fundo da vista de plano de fundo:
func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int){
let tableHeader = view as! UITableViewHeaderFooterView
tableHeader.backgroundView?.backgroundColor = UIColor.white
}
Para rápido 5 +
No willDisplayHeaderView
método
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
}
Espero que isso ajude você :]
Embora func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int)
funcione bem, você pode conseguir isso sem implementar outro método delegado. no seu func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
método, você pode usar em view.contentView.backgroundColor = UIColor.white
vez do view.backgroundView?.backgroundColor = UIColor.white
que não está funcionando. (Eu sei que backgroundView
é opcional, mas mesmo quando existe, isso não é possível sem a implementaçãowillDisplayHeaderView