UITableView-섹션 헤더 색상 변경


답변:


393

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 년 업데이트 :

스위프트 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.


17
self.tableView.sectionHeaderHeight를 사용하여 섹션 헤더 크기를 조정하는 데 도움이 될 수도 있습니다. 그렇지 않으면 섹션 제목에 대해 표시하는 텍스트가 표시되지 않을 수 있습니다.
Tony Lenzi

함께 잘 작동 [UIColor xxxColor]내가 그렇게를 사용하여 내가 포토샵 (에서 얻을 수있는 것과 같은 사용자 정의 색상을하려고 할 때하지만 UIColor red:green:blue:alpha:, 그냥 흰색입니다 오전 내가 뭔가 잘못된 일입니다.?
마테이

별도의 질문을 게시하면 도와 드리겠습니다. 소스 코드를 포함하십시오.
Alex Reynolds

12
이 답변 (정확한)은 단순히 내용이없는 UIView를 반환합니다.
Greg M. Krsak

7
이것은 매우 오래된 정보이며 단순히 다른보기를 만드는 것이 가장 좋은 대답은 아닙니다. 아이디어는 적절한 시야를 확보하고 색상이나 색조를 변경하는 것입니다. willDisplayHeaderView를 사용하는 아래의 대답은 훨씬 더 나은 방법입니다.
Alex Zavatone

741

이것은 오래된 질문이지만 대답을 업데이트해야한다고 생각합니다.

이 방법에는 사용자 정의보기를 정의하고 작성하는 것이 포함되지 않습니다. 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/

스위프트 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
}

2
나는 이것이 심지어 SDK에 추가되었다는 것을 몰랐다. 훌륭한! 정답입니다.
JRod

1
OP-이 답변에 허용 된 답변을 업데이트하십시오. 기존 방식보다 훨씬 깨끗합니다.
Kyle Clegg

10
이것은 나를 위해 작동하지 않는 것 같습니다. 텍스트 색상은 작동하지만 헤더 배경의 색조는 작동하지 않습니다. 나는 아이폰 OS 7.0.4 오전
zeeple

10
user1639164, header.backgroundView.backgroundColor = [UIColor blackColor];를 사용할 수 있습니다. 헤더 배경의 색조를 설정합니다.
慭 慭 流 觞

2
@ 켄트 그것은 분명히 header.contentView.backgroundColor = [UIColor blackColor];
오래

98

텍스트 색상을 변경하는 방법은 다음과 같습니다.

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

18
감사합니다 DoctorG-유용했습니다. BTW-dataSource에서 제공하는 기존 레이블을 유지하기 위해 두 번째 줄을 다음과 같이 수정했습니다. label.text = [tableView.dataSource tableView : tableView titleForHeaderInSection : section]; 나쁜 형태 일지 모르지만 그것은 나를 위해 일했습니다. 아마도 이것은 다른 사람을 도울 수 있습니다.
JJ Rohrer

1
@JJ 처음에는 테이블의 섹션 헤더를 정의하는 데 사용하는 것과 동일한 메서드를 호출하기 때문에이 형식은 실제로 좋습니다.
Tim

3
자동 릴리스를 제거하고 명시 적 릴리스로 변경했습니다. UITableView 형식화 메소드는 여러 번 호출됩니다. 가능하면 자동 릴리스를 사용하지 마십시오.
memmons

@Harkonian은 제출 된 답변을 변경하지 말고 답변에 대한 주석 변경을 권장하십시오. 다른 사람의 코드를 편집하여 변경하는 것은 나쁜 형식으로 간주됩니다. 철자 오류, 잘못된 형식 및 문법은 공정한 게임입니다.
Tin Man

1
addSubview : UILabel 대신 viewForHeaderInSection에서 UILabel을 리턴해야합니다. UILable is-a UIView 이미 :)
Nas Banov

52

사용자 정의 색상의 헤더를 원할 경우이 작업을 수행 할 수 있습니다.

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

이 솔루션은 iOS 6.0부터 훌륭하게 작동합니다.


1
흠 .. 그것은 나를 위해 작동하지 않습니다. iOS 6 시뮬레이터와 iOS 7 장치를 사용해 보았습니다. 이 방법으로 테스트 했습니까? 어디에 두어야합니까?
Maxim Kholyavkin

application : didFinishLaunchingWithOptions : application delegate의 메소드에서 수행 할 수 있습니다.
Leszek Zarna

변경 텍스트 색상이 방법이 사용되어야한다 : 내 잘못이 : UITableViewStyleGrouped가 BTW 동안이 방법을 사용하려고 stackoverflow.com/a/20778406/751932
맥심 Kholyavkin

사용자 정의 UIView에있는 경우-init 메소드에 넣으십시오.
felixwcf

31

다음 솔루션은 iOS 8 이상이 설치된 Swift 1.2에서 작동합니다

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

}

22

UITableViewHeaderFooterView에서 배경색 설정은 더 이상 사용되지 않습니다. contentView.backgroundColor대신 사용하십시오 .


21

델리게이트에서이 코드를 추가하는 것을 잊지 마십시오. 그렇지 않으면 뷰 / 레이블의 높이와 관련하여 뷰가 잘 리거나 테이블 뒤에 나타납니다.

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

iOS6를 따랐다가 나중에 Dj S의 답변을받은 경우 더 이상 필요하지 않습니다.
Bjinse

21

main.storyboard에서 약 2 초 안에 할 수 있습니다.

  1. 테이블 뷰 선택
  2. 속성 관리자로 이동
  3. 아이템 목록
  4. 아래로 스크롤하여 소제목보기
  5. 배경을 바꾸다"

여기 좀 봐


18

커스텀 뷰를 생성하지 않으려면 다음과 같이 색상을 변경할 수도 있습니다 (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;
    }
}

13

섹션 영역의 배경 및 텍스트 색상을 설정합니다 (덕분에 William JockuschDj 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

스위프트 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)
} 

이것은 나를 위해 완벽하게 작동했습니다. 그것이 당신에게도 도움이되기를 바랍니다!


UITableViewHeaderFooterView에서 배경색 설정은 더 이상 사용되지 않습니다. 원하는 배경색으로 사용자 정의 UIView를 대신 backgroundView 특성으로 설정해야합니다.
mojtaba al moussawi

10

헤더보기에서 이미지를 추가하는 방법은 다음과 같습니다.

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

8

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

}

( "오버라이드"는 프로젝트에서 일반 UIViewController 대신 UITableViewController를 사용하기 때문에 존재하지만 섹션 헤더 색상을 변경하는 데 필수는 아닙니다)

헤더의 텍스트는 계속 표시됩니다. 섹션 헤더 높이를 조정해야합니다.

행운을 빕니다.


6

스위프트 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

}

5

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
    }

4

iOS 8 이상

func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
        tableView.tableHeaderView?.backgroundColor = UIColor.blue()
}

4

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

3

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

이 코드는 그렇게 나쁘지 않다고 생각합니다.

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

스위프트 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
    }

스위프트 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)
    }

아니면 단순한 색이라면

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

4
iOS 13에서는 "view.backgroundColor"를 "view.tintColor"로 바꿉니다.
Bogdan Razvan

2

iOS 7.0.4에서는 자체 XIB로 사용자 정의 헤더를 작성했습니다. 전에는 언급 한 것이 없습니다. 를 사용하려면 UITableViewHeaderFooterView의 하위 클래스 여야했으며 dequeueReusableHeaderFooterViewWithIdentifier:배경색과 관련하여 클래스가 매우 완고한 것 같습니다. 마지막으로 customBackgroudView라는 이름으로 UIView (코드 또는 IB로 수행 가능)를 추가 한 다음 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

헤더보기의 레이어 색상을 변경하십시오.

-(UIView *) tableView : (UITableView *) tableView viewForHeaderInSection : (NSInteger) 섹션 
{
  UIView * headerView = [[[UIView alloc] initWithFrame : CGRectMake (0, 0, tableView.bounds.size.width, 30)] 자동 릴리스];
 headerView.layer.backgroundColor = [UIColor clearColor] .CGColor
}


2

누구든지 신속하게 필요한 경우 제목을 유지하십시오.

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

콘솔 로그를 통해 Xcode에서 메시지를 받았습니다.

[TableView] UITableViewHeaderFooterView에서 배경색 설정이 사용되지 않습니다. 원하는 배경색으로 사용자 정의 UIView를 backgroundView 속성으로 설정하십시오.

그런 다음 새 UIView를 만들고 HeaderView의 배경으로 배치합니다. 좋은 해결책은 아니지만 Xcode가 말한 것처럼 쉽습니다.


2

제 경우에는 다음과 같이 작동했습니다.

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

2

배경보기의 배경색을 설정하십시오.

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

1

RubyMotion / RedPotion을 사용하여 이것을 TableScreen에 붙여 넣으십시오.

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

매력처럼 작동합니다!


1

신속한 5 +

에서 willDisplayHeaderView방법

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
}

나는 이것이 당신에게 도움이되기를 바랍니다 :]


0

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.