2010-07-20 4 views
19

이전에 요청한 사항을 알고 있으므로 다시 묻기를 용서하십시오. 이 작업을 쉽게 수행 할 수있는 것처럼 보입니다.UITableView 섹션 헤더의 색 변경

UITableView 섹션 헤더 배경색을 변경하는 '간단한'방법이 있습니까? 나는 위임 메소드 'viewForHeaderInSection'을 사용하여 UITableView에 섹션 헤더에 사용할 사용자 정의 UIView를 전달할 수 있지만 실제로하고 싶은 것은 'tintColor'를 설정하는 것입니다. 검색 막대에 tintColor 속성이 있습니다. 왜 섹션 헤더가 아닙니다.

viewForHeaderInSection을 사용하여 사용자 정의 UIView를 만드는 경우 자체 레이블을 만들어야합니다. 스타일을 지정하고 내 레이블을 Apple 표준의 나머지 부분과 똑같이 보이게 배치해야합니다. 나는 Apple 표준의 나머지 부분처럼 보이게하기 위해 '배경'을 스타일링하고 크기를 조정해야합니다.

섹션 헤더를 요청한 다음 색상을 변경하는 방법을 찾을 수 없습니다. 나는 뭔가를 놓치고 있는가? 아니면 정말로 힘든 방법으로해야만 하는가?

어려운 일을해야한다면 누군가 Apple 표준과 일치하는 모든 스타일 정보를 가지고 있습니까? - 바 상단에 약간의 음영을 가지고 있으며, 하단 - - 레이블은 특정 크기, 위치, 명암 등

감사를 가지고 바는 '반투명' 이다. 다시 한 번이 질문에 대해 사과드립니다.

답변

12

이것은 섹션 헤더의 tintColor를 변경할 수있는 방법이 없다는 것을 알기 위해 꽤 많은 시간을 보냈습니다. 필자가 생각해 낸 해결책은 섹션 헤더의 배경을 캡쳐하고 Photoshop에서 색조를 변경 한 다음 섹션 머리글의 배경으로 사용하는 것입니다. 그런 다음 레이블을 배치하는 경우입니다.

당신이 말했듯이, 사용하는 것은 viewForHeaderInSection 대리자 메소드입니다. 여기

내가 작품을 발견하고 애플의 기본처럼 보이는 한 것입니다 :

여기
UIView *customView = [[[UIView alloc] initWithFrame:CGRectMake(10.0, 0.0, 320.0, 22.0)] autorelease]; 
customView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"headerbackground.png"]];; 

UILabel *headerLabel = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease]; 
headerLabel.backgroundColor = [UIColor clearColor]; 
headerLabel.opaque = NO; 
headerLabel.textColor = [UIColor whiteColor]; 
headerLabel.font = [UIFont boldSystemFontOfSize:18]; 
headerLabel.shadowOffset = CGSizeMake(0.0f, 1.0f); 
headerLabel.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5]; 
headerLabel.frame = CGRectMake(11,-11, 320.0, 44.0); 
headerLabel.textAlignment = UITextAlignmentLeft; 
headerLabel.text = @"Header Label"; 
[customView addSubview:headerLabel]; 
return customView; 

는 "headerbackground.png는"22 픽셀로 1 픽셀 인 이미지 (아이폰 4에 대한 두 배) 얻을 것이다 헤더의 길이에 걸쳐 반복된다.

희망이 도움이됩니다. 버전에서 일을하는 새로운 UIAppearance 방법으로

+0

왜 iPhone 4의 두 배입니까? 해당 정보에 대한 참조를주십시오. – Anand

+1

iPhone 4의 해상도가 두 배이기 때문에? 그래서 그 예에서 "headerbackground.png"는 1x22가 될 것이고, 아이폰 4 (그리고 새로운 아이팟 터치)에서 사용될 "[email protected]"라는 또 다른 이미지를 갖게 될 것입니다. 자세한 내용은 다음을 참조하십시오. http : //developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/SupportingResolutionIndependence/SupportingResolutionIndependence.html – neilkimmett

+0

내 자신의 스크린 샷을 사용하면 텍스트의 적절한 왼쪽 인세 트가 12 픽셀, 10 아닙니다. 이렇게 : CGFloat leftInset = 12.0f; UILabel * label = [[UILabel alloc] initWithFrame : CGRectMake (leftInset, 0, tableSize.width - leftInset, headerImg.size.height)]; – MoDJ

29

> 아이폰 OS 6.0 다만, 예를 들어 : UIAppearance

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

어디에 넣어야합니까? – Ulaga

+0

iOS 10에서 효과가없는 것으로 보입니다. – elsurudo

19

이처럼 UITableView 헤더에 UILabel 텍스트 색상을 변경할 수 있습니다

[[UILabel appearanceWhenContainedIn:[UITableViewHeaderFooterView class], nil] setTextColor:[UIColor whiteColor]]; 
[[UILabel appearanceWhenContainedIn:[UITableViewHeaderFooterView class], nil] setShadowColor:[UIColor whiteColor]]; 

iOS 6.0 이상에서 작동해야합니다. 어디서나 호출 할 수 있습니다 (viewDidLoad 등).

+1

[UITableViewHeaderFooterView class]는 iOS 6.0까지 nil을 반환해야합니다.이 방법은 6.0까지 작동하지 않아야합니다. – Speakus

+0

감사합니다. – user882209

7

다른 답변과 마찬가지로 모양을 변경하면 응용 프로그램의 범위가 넓어집니다. 당신은 단지 특정의 tableview에 대한 변경하려면 는 구현 :

-(void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section { 
    UITableViewHeaderFooterView * headerview = (UITableViewHeaderFooterView *)view; 
    headerview.contentView.backgroundColor = [UIColor greenColor]; 
    headerview.textLabel.textColor = [UIColor whiteColor]; 
} 
2

appearanceWhenContainedIn는 아이폰 OS 9으로 사용되지되었습니다 UIAppearance 방법.0; 대신 appearanceWhenContainedInInstancesOfClasses 메서드와 배열을 사용하여 똑같은 작업을 수행 할 수 있습니다.

[UILabel appearanceWhenContainedInInstancesOfClasses:@[[UITableViewHeaderFooterView class]]].textColor = [UIColor darkTextColor];