Изменение цвета заголовков разделов UITableView - PullRequest
19 голосов
/ 21 июля 2010

ОК, я знаю, что об этом уже спрашивали, поэтому, пожалуйста, прости меня, что спросил снова. Просто кажется, что должен быть более простой способ сделать это.

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

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

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

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

Спасибо. И еще раз прошу прощения за повторный вопрос.

Ответы [ 5 ]

30 голосов
/ 28 января 2013

С более новым способом UIAppearance, в версиях> iOS 6.0, вы можете просто сделать, например:

[[UITableViewHeaderFooterView appearance] setTintColor:[UIColor redColor]];
20 голосов
/ 26 декабря 2013

С UIAppearance вы можете изменить UILabel цвет текста на ваших UITableView заголовках следующим образом:

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

Должно работать на iOS 6.0+.Можно звонить куда угодно (viewDidLoad и т. Д.).

12 голосов
/ 26 августа 2010

Это то, что я потратил довольно много времени на борьбу с собой, но обнаружил, что просто изменить цвет 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), которое будет повторяться по всей длине заголовка.

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

8 голосов
/ 26 февраля 2014

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

-(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 голосов
/ 03 мая 2017

Появление метода UIAppearance .henContainedIn устарело с iOS 9.0;вместо этого вы все равно можете сделать то же самое с помощью метода creationWhenContainedInInstancesOfClasses и массива.

[UILabel appearanceWhenContainedInInstancesOfClasses:@[[UITableViewHeaderFooterView class]]].textColor = [UIColor darkTextColor];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...