UITableViewHeaderFooterView: невозможно изменить цвет фона
Я пытаюсь изменить цвет фона UITableViewHeaderFooterView. Хотя вид отображается, цвет фона остается цветом по умолчанию. Я получаю журнал от xcode говоря:
установка цвета фона на UITableViewHeaderFooterView была не одобрять. Пожалуйста, используйте contentView.фоновый цвет вместо этого.
однако, ни один из следующих вариантов работы:
myTableViewHeaderFooterView.contentView.backgroundColor = [UIColor blackColor];
myTableViewHeaderFooterView.backgroundView.backgroundColor = [UIColor blackColor];
myTableViewHeaderFooterView.backgroundColor = [UIColor blackColor];
Я также попытался изменить цвет фона вид в xib файл.
какие предложения? Спасибо.
17 ответов:
вы должны либо использовать myTableViewHeaderFooterView.tintColor, или назначить пользовательский фоновый вид для myTableViewHeaderFooterView.backgroundView.
iOS 8, 9, 10, 11...
единственный способ установить любой цвет (с альфа) - это использовать
backgroundView
:Свифт
self.backgroundView = UIView(frame: self.bounds) self.backgroundView.backgroundColor = UIColor(white: 0.5, alpha: 0.5)
Obj-C
self.backgroundView = ({ UIView * view = [[UIView alloc] initWithFrame:self.bounds]; view.backgroundColor = [UIColor colorWithWhite: 0.5 alpha:0.5]; view; });
ответы на комментарии
ни один из этих других вариантов надежно не работает (несмотря на комментарии ниже)
// self.contentView.backgroundColor = [UIColor clearColor]; // self.backgroundColor = [UIColor clearColor]; // self.tintColor = [UIColor clearColor];
the
backgroundView
изменяется автоматически. (нет необходимости добавлять ограничения)контроль Альфа с
UIColor(white: 0.5, alpha: 0.5)
илиbackgroundView.alpha = 0.5
.
(конечно, любой цвет будет делать)при использовании XIB, сделать корневой вид a
UITableViewHeaderFooterView
и юристbackgroundView
программно:регистрация с:
tableView.register(UINib(nibName: "View", bundle: nil), forHeaderFooterViewReuseIdentifier: "header")
загрузить с:
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { if let header = tableView.dequeueReusableHeaderFooterView(withIdentifier: "header") { let backgroundView = UIView(frame: header.bounds) backgroundView.backgroundColor = UIColor(white: 0.5, alpha: 0.5) header.backgroundView = backgroundView return header } return nil }
► найти это решение на GitHub и дополнительные сведения о Быстрые Рецепты.
в iOS 7
contentView.backgroundColor
работал для меня,tintColor
не.headerView.contentView.backgroundColor = [UIColor blackColor];
хотя
clearColor
не работает для меня, решение, которое я нашел, чтобы установитьbackgroundView
свойство прозрачного изображения. Может быть, это кому-то поможет:UIGraphicsBeginImageContextWithOptions(CGSizeMake(1, 1), NO, 0.0); UIImage *blank = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); headerView.backgroundView = [[UIImageView alloc] initWithImage:blank];
убедитесь, что вы установили backgroundColor
contentView
дляUITableViewHeaderFooterView
:self.contentView.backgroundColor = [UIColor whiteColor];
тогда это будет работать.
для меня я пробовал все, что указано выше, но все равно получал предупреждение "Установка цвета фона на UITableViewHeaderFooterView была устаревшей. Пожалуйста, используйте contentView.фоновый цвет вместо этого."тогда я попробовал это: в файле xib был выбран цвет фона для представления заголовка, чтобы очистить цвет вместо значения по умолчанию, как только я изменил его на значение по умолчанию, предупреждение исчезло.
On iOS 9 охота
headerView.backgroundView.backgroundColor
работала на меня:- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{ TableViewHeader *headerView = (TableViewHeader *)[super tableView:tableView viewForHeaderInSection:section]; headerView.backgroundView.backgroundColor = [UIColor redColor]; }
On iOS8 Я был с помощью
headerView.contentView.backgroundColor
без проблем, но теперь с iOS 9 я получал странную проблему, которая заставляла цвет фона не заполнять все пространство ячейки. Так что я попробовал простоheaderView.backgroundColor
и я получил ту же ошибку от OP.установка цвета фона на UITableViewHeaderFooterView была не одобрять. Пожалуйста, используйте contentView.свойство backgroundColor вместо.
так что теперь все работает отлично и без предупреждений с помощью
headerView.backgroundView.backgroundColor
если вы создали пользовательский подкласс
UITableViewHeaderFooterView
Сxib
файл, то вы должны переопределитьsetBackgroundColor
. Держите его пустым.-(void)setBackgroundColor:(UIColor *)backgroundColor { }
и это решит вашу проблему.
для четкого цвета, я использую
self.contentView.backgroundColor = [UIColor clearColor]; self.backgroundView = [UIView new]; self.backgroundView.backgroundColor = [UIColor clearColor];
Мне кажется, все в порядке.
если вы настройка ячейки заголовка раздела с помощью раскадровки / Nib, то убедитесь, что цвет фона по умолчанию для представления "заголовок раздела таблицы".
а если вы подкласс
UITableViewHeaderFooterView
, и, используя перо, то, что вам нужно сделать, это создатьIBOutlet
для представления содержимого и назовите его, например.containerView
. Это не следует путать сcontentView
, который является родителем данного вида контейнера.С этой настройкой вы меняете фон цвет
containerView
вместо.
для цветов сплошного фона установите
contentView.backgroundColor
должно быть достаточно:func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) { if let headerView = view as? UITableViewHeaderFooterView { headerView.contentView.backgroundColor = .red // Works! } }
цвета с прозрачностью, в том числе
.clear
цвета, это больше не работает:func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) { if let headerView = view as? UITableViewHeaderFooterView { headerView.contentView.backgroundColor = .clear // Does not work } }
для полного прозрачного заголовка раздела установите
backgroundView
свойство для пустого представления:func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) { if let headerView = view as? UITableViewHeaderFooterView { headerView.backgroundView = UIView() // Works! } }
однако, остерегайтесь возможных побочных эффектов. Если для табличного представления не задано значение "сгруппировано", заголовки разделов будут щелкать сверху при прокрутке вниз. Если заголовки разделов прозрачный, содержимое ячейки будет видно насквозь, что может выглядеть не очень хорошо.
здесь заголовки разделов имеют прозрачный фон:
чтобы предотвратить это, лучше установить фон заголовка раздела в сплошной цвет (или градиент), соответствующий фону вашего табличного представления или контроллера вида.
здесь заголовки разделов имеют полностью непрозрачный градиент Предыстория:
Я попытался с appearanceWhenContainedIn цепи, и это сработало для меня.
[[UIView appearanceWhenContainedIn:[UITableViewHeaderFooterView class], [UITableView class], nil] setBackgroundColor: [UIColor.grayColor]];
в interface builder подтяните ваш .xib, на верхнем элементе, в инспекторе атрибутов установите цвет фона по умолчанию. Затем перейдите в представление содержимого и установите там цвет фона (ссылка на https://github.com/jiecao-fm/SwiftTheme/issues/24).
установка BackgroundView с четким цветом отлично работает для видимых заголовков. Если таблица прокручивается для отображения заголовков в нижней части, это решение не выполняется.
P. S. Мои таблицы состоит только из заголовков без каких-либо клеток.
Swift:
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView { var headerView: TableViewHeader = super.tableView(tableView, viewForHeaderInSection: section) as! TableViewHeader headerView.backgroundView.backgroundColor = UIColor.redColor() }
создать UIView и установить цвет фона, а затем установить его на себя.backgroundView.
- (void)setupBackgroundColor:(UIColor *) color { UIView *bgView = [[UIView alloc] initWithFrame:self.bounds]; bgView.backgroundColor = color; self.backgroundView = bgView; }
Я чувствую себя обязанным поделиться своим опытом. У меня был этот кусок кода, который отлично работал с iOS 10 и iOS 11
headerView?.contentView.backgroundColor = .lightGray
затем я внезапно решил развернуть приложение для iOS 9, поскольку есть некоторые устройства (iPad mini некоторых более старых поколений не обновляется до любой ОС за пределами 9) - единственное решение, которое работало для всех iOS 9, 10 и 11, состояло в том, чтобы определить базовый вид для заголовка, который затем содержит все другие заголовочные подвиды, подключить его из раскадровки и установить
backgroundColor
of это базовый вид.вы хотите быть внимательными при подключении розетки, чтобы не называть его:
backgroundView
Как уже есть свойство с этим именем в некоторыхsuperclass
. Я назвал свойcontainingView
также при подключении розетки управления нажмите на вид в
Document Outline
чтобы убедиться, что он не подключен кfile owner