it-swarm.com.ru

UITableView - изменить цвет заголовка раздела

Как я могу изменить цвет заголовка раздела в UITableView?

EDIT: ответ, предоставленный DJ-S , следует учитывать для iOS 6 и выше. Принятый ответ устарел.

297
Ilya Suzdalnitski

Надеюсь, этот метод из протокола 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:

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
    }

Замените [UIColor redColor] на любой UIColor, который вы хотите. Вы также можете настроить размеры headerView.

376
Alex Reynolds

Это старый вопрос, но я думаю, что ответ должен быть обновлен.

Этот метод не включает определение и создание собственного настраиваемого представления. В 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
}
673
Dj S

Вот как можно изменить цвет текста.

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

Вы можете сделать это, если вы хотите заголовок с пользовательским цветом:

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

Это решение прекрасно работает с iOS 6.0.

49
Leszek Zarna

Следующее решение работает для Swift 1.2 с 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

Не забудьте добавить этот фрагмент кода от делегата, иначе ваше представление будет обрезано или появится в некоторых случаях за таблицей относительно высоты вашего представления/метки.

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

Если вы не хотите создавать пользовательский вид, вы также можете изменить цвет следующим образом (требуется 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
William Jockusch

Установка цвета фона для UITableViewHeaderFooterView устарела. Пожалуйста, используйте contentView.backgroundColor вместо этого.

16
Alex

Вы можете сделать это на main.storyboard примерно за 2 секунды.

  1. Выберите вид таблицы
  2. Перейти к атрибуту инспектора
  3. Элемент списка
  4. Прокрутите вниз, чтобы просмотреть подзаголовок 
  5. Изменить "фон"

 Have a look here

13
Steve

Установите фон и цвет текста области раздела: (Благодаря William Jockusch и 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
Roozbeh Zabihollahi

Swift 4

Чтобы изменить цвет фона , цвет текстовой метки и шрифт для представления заголовка раздела UITableView, просто переопределите willDisplayHeaderView для представления таблицы следующим образом:

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

Это отлично сработало для меня; надеюсь, это вам тоже поможет!

11
Nii Mantse

Вот как добавить изображение в заголовок:

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

Для iOS8 (бета-версия) и 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 в моем проекте, но это не обязательно для изменения цвета заголовка раздела)

Текст вашего заголовка будет по-прежнему виден. Обратите внимание, что вам нужно будет отрегулировать высоту заголовка раздела.

Удачи.

8
Corona

Swift 2

Мне удалось успешно изменить цвет фона раздела с добавленным эффектом размытия (что действительно здорово). Чтобы легко изменить цвет фона раздела:

  1. Сначала перейдите к раскадровке и выберите представление таблицы 
  2. Перейти к атрибуту инспектора
  3. Элемент списка
  4. Прокрутите вниз, чтобы посмотреть
  5. Изменить «Фон»

Затем для эффекта размытия добавьте в код:

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

Я знаю его ответ, на всякий случай, в 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
    }
5
arango_86

Основываясь на ответе @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
}
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

У меня есть проект, использующий статические ячейки табличного представления, в 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];
3
David DelMonte

Я думаю, что этот код не так уж и плох.

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

Если кому-то нужен Swift, сохраните заголовок:

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

Просто измените цвет слоя представления заголовка

- (UIView *) tableView: (UITableView *) tableView viewForHeaderInSection: (NSInteger) раздел 
 {
 UIView * headerView = [[[UIView alloc] initWithFrame: CGRectMake (0, 0, tableView.bounds.size.width, 30)] autorelease]; 
 headerView.layer.backgroundColor = [UIColor clearColor] .CGColor 
} 

2
Ramesh

В моем случае это сработало так:

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

В iOS 7.0.4 я создал собственный заголовок с собственным XIB. Ничто из упомянутого здесь раньше не работало. Это должен был быть подкласс UITableViewHeaderFooterView для работы с dequeueReusableHeaderFooterViewWithIdentifier:, и кажется, что класс очень упрям ​​в отношении цвета фона. Наконец, я добавил UIView (вы можете сделать это с помощью кода или IB) с именем customBackgroudView, а затем установил его свойство 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;
}
2
Maksymilian Wojakowski

С RubyMotion/RedPotion вставьте это в свой настольный экран:

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

Работает как шарм!

1
Eli Duke

Просто установите цвет фона для фона:

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

Я получил сообщение от Xcode через консольный журнал

[TableView] Установка цвета фона на UITableViewHeaderFooterView устарел. Пожалуйста, установите пользовательский UIView с нужным цветом фона для backgroundView собственность вместо.

Затем я просто создаю новый UIView и кладу его в качестве фона HeaderView . Не очень хорошее решение, но это легко, как сказал Xcode.

1
Pokotuz

Используя UIAppearance, вы можете изменить его для всех заголовков в вашем приложении следующим образом:

UITableViewHeaderFooterView.appearance (). BackgroundColor = theme.subViewBackgroundColor

0
devjme

Хотя 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

0
gutte

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
    }
0
David Sanford