2010-07-20 4 views
19

Хорошо, я знаю, что это было задано ранее, поэтому, пожалуйста, простите меня за повторный запрос. Просто кажется, что для этого нужен более простой способ.Изменение цвета заголовков раздела UITableView

Есть ли «простой» способ изменить цвет фона заголовка раздела UITableView? Я знаю, что я могу использовать метод делегата «viewForHeaderInSection», чтобы передать UITableView пользовательский UIView для использования в заголовках разделов, но все, что я действительно хочу сделать, это установить «tintColor». В строке поиска есть свойство tintColor, почему бы и нет для заголовков разделов.

Если я использую viewForHeaderInSection для создания собственного пользовательского UIView, мне также нужно создать свой собственный ярлык. Мне нужно стилизовать и поместить мой ярлык, чтобы он выглядел так же, как и весь стандарт Apple. У меня есть стиль и размер «фона», чтобы он выглядел как остальная часть стандарта Apple.

Я не могу найти способ просто спросить заголовок раздела, а затем изменить его цвет. Я что-то упускаю, или мне действительно нужно сделать это с трудом.

Если мне нужно сделать это трудным путем, у кого-то есть вся информация о стиле, соответствующая стандарту Apple? - бар «полупрозрачный» - бар имеет некоторое затенение на верхней и нижней - этикетка имеет определенный размер, положение, Затенение и т.д.

Спасибо. И еще раз, жаль, что снова задал этот вопрос.

ответ

12

Это то, что я потратил довольно долго на себя, только чтобы найти, что нет способа просто изменить tintColor заголовка раздела. Решение, с которым я столкнулся, состояло в том, чтобы сделать снимок экрана заголовка раздела, изменить его оттенок в Photoshop, а затем использовать его в качестве фона заголовка раздела. Тогда это всего лишь случай выкладки этикетки.

Как вы сказали, все, что нужно использовать, это метод делегата viewForHeaderInSection.

Вот что я нашел работу и выглядит как Apple, по умолчанию:

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» является 1 пикселем на 22 пикселя (вдвое больше, чем для iPhone 4) изображения, которое получит повторяется по длине заголовка.

Надеюсь, это поможет!

+0

Почему это вдвое больше, чем у iPhone 4? Можете ли вы дать ссылку на эту информацию. – Anand

+1

Поскольку iPhone 4 имеет разрешение в два раза? Таким образом, в этом примере «headerbackground.png» будет 1x22, и у меня также будет другое изображение под названием «[email protected]», которое будет использоваться на iPhone 4 (и теперь новый iPod touch). Для получения дополнительной информации читайте здесь: 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

С новой UIAppearance способ делать вещи, в версиях> IOS 6,0 вы можете просто сделать, например:

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

где мне нужно это поставить? – Ulaga

+0

Кажется, не имеет никакого эффекта в iOS 10 – elsurudo

19

С UIAppearance вы можете изменить UILabel цвет текста на вашем UITableView заголовки, как это:

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

Должно работать на iOS 6.0+. Может быть вызван в любом месте (viewDidLoad и т. Д.).

+1

[UITableViewHeaderFooterView class] должен возвращать nil до iOS 6.0, чтобы этот метод не работал до 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

Метод UIAppearance appearanceWhenContainedIn был устаревшим прошивкой 9.0; вместо этого вы все равно можете сделать то же самое с методом usageWhenContainedInInstancesOfClasses и массивом.

[UILabel appearanceWhenContainedInInstancesOfClasses:@[[UITableViewHeaderFooterView class]]].textColor = [UIColor darkTextColor]; 
Смежные вопросы