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

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

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

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

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

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

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

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

Внешний вид метода UIAppearanceWhenContainedIn устарел с iOS 9.0; вместо этого вы все равно можете сделать то же самое с методом usageWhenContainedInInstancesOfClasses и массивом.

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

Ответ 6

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int){         
  let tableHeader = view as! UITableViewHeaderFooterView        
  tableHeader.backgroundVie'enter code here'w?.backgroundColor = UIColor.white     
}