UITableViewHeaderFooterView: No se puede cambiar el color de fondo
Estoy tratando de cambiar el color de fondo de UITableViewHeaderFooterView. Aunque la vista está apareciendo, el color de fondo sigue siendo el color predeterminado. Estoy recibiendo un registro de xcode diciendo:
Establecer el color de fondo en UITableViewHeaderFooterView ha sido obsoleto. Por favor utilice contentView.backgroundColor lugar.
Sin embargo, ninguna de las siguientes opciones funciona:
myTableViewHeaderFooterView.contentView.backgroundColor = [UIColor blackColor];
myTableViewHeaderFooterView.backgroundView.backgroundColor = [UIColor blackColor];
myTableViewHeaderFooterView.backgroundColor = [UIColor blackColor];
También he intentado cambiar el color de fondo de la vista en el xib file.
Alguna sugerencia? Gracias.
17 answers
Debe usar myTableViewHeaderFooterView.tintColor, o asignar una vista de fondo personalizada a myTableViewHeaderFooterView.backgroundView (en inglés).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-24 22:43:39
IOS 8, 9, 10, 11...
La única manera de establecer cualquier color (con cualquier alfa) es usar backgroundView
:
Swift
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;
});
Respuestas a los Comentarios
-
Ninguna de estas otras opciones funciona de manera fiable (a pesar de los comentarios a continuación)
// self.contentView.backgroundColor = [UIColor clearColor]; // self.backgroundColor = [UIColor clearColor]; // self.tintColor = [UIColor clearColor];
El
backgroundView
se redimensiona automáticamente. (No es necesario añadir restricciones)Control alfa con
UIColor(white: 0.5, alpha: 0.5)
obackgroundView.alpha = 0.5
.
(por supuesto, cualquier color servirá)-
Cuando use XIB , haga que la vista raíz sea
UITableViewHeaderFooterView
y asocie labackgroundView
mediante programación:Registrarse con:
tableView.register(UINib(nibName: "View", bundle: nil), forHeaderFooterViewReuseIdentifier: "header")
Cargar con:
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 }
► Encuentre esta solución en GitHub y detalles adicionales en Recetas Swift .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-12 03:58:58
En iOS 7 contentView.backgroundColor
funcionó para mí, tintColor
no lo hizo.
headerView.contentView.backgroundColor = [UIColor blackColor];
Aunque clearColor
no funcionó para mí, la solución que encontré es establecer la propiedad backgroundView
a imagen transparente. Tal vez ayude a alguien:
UIGraphicsBeginImageContextWithOptions(CGSizeMake(1, 1), NO, 0.0);
UIImage *blank = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
headerView.backgroundView = [[UIImageView alloc] initWithImage:blank];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-30 14:38:31
Asegúrese de establecer el color de fondo de la contentView
para su UITableViewHeaderFooterView
:
self.contentView.backgroundColor = [UIColor whiteColor];
Entonces funcionará.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-15 18:45:44
Para mí he intentado todo lo indicado anteriormente, pero todavía estaba recibiendo la advertencia
"Establecer el color de fondo en UITableViewHeaderFooterView ha sido obsoleto. Por favor utilice contentView.backgroundColor lugar."entonces probé esto:
dentro del archivo xib, el color de fondo para la vista de encabezado se seleccionó para borrar el color en lugar del predeterminado una vez que lo cambié a predeterminado, la advertencia desapareció.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-19 17:12:57
On iOS9 headerView.backgroundView.backgroundColor
funcionó para mí:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
TableViewHeader *headerView = (TableViewHeader *)[super tableView:tableView viewForHeaderInSection:section];
headerView.backgroundView.backgroundColor = [UIColor redColor];
}
En iOS8 Estaba usando headerView.contentView.backgroundColor
sin problemas, pero ahora con iOS 9, estaba teniendo un problema extraño que hacía que el color de fondo no llenara todo el espacio de la celda. Así que intenté solo headerView.backgroundColor
y obtuve el mismo error de la OP.
Establecer el color de fondo en UITableViewHeaderFooterView ha sido obsoleto. Por favor utilice contentView.backgroundColor lugar.
Así que ahora todo funciona muy bien y sin advertencias usando headerView.backgroundView.backgroundColor
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-06 16:41:20
Si ha creado una subclase personalizada de UITableViewHeaderFooterView
con xib
archivo, entonces debe anular setBackgroundColor
. Mantenerlo vacío.
-(void)setBackgroundColor:(UIColor *)backgroundColor {
}
Y esto resolverá su problema.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-13 09:24:32
Para un color claro, utilizo
self.contentView.backgroundColor = [UIColor clearColor];
self.backgroundView = [UIView new];
self.backgroundView.backgroundColor = [UIColor clearColor];
Me parece bien.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-12 06:06:17
Si está personalizando una celda de encabezado de sección con Storyboard/Nib, asegúrese de que el color de fondo sea predeterminado para la vista "Encabezado de sección de tabla".
Y si subclases UITableViewHeaderFooterView
, y usas nib, entonces lo que tienes que hacer es crear un IBOutlet
para la vista de contenido, y nombrarlo por ejemplo. containerView
. Esto no debe confundirse con contentView
, que es el padre de esta vista de contenedor.
Con esa configuración, cambia el color de fondo de containerView
en su lugar.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-02 09:45:36
Para los colores de fondo sólido, establecer el contentView.backgroundColor
debería ser suficiente:
func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
if let headerView = view as? UITableViewHeaderFooterView {
headerView.contentView.backgroundColor = .red // Works!
}
}
Para colores con transparencia, incluyendo .clear
color, esto ya no funciona:
func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
if let headerView = view as? UITableViewHeaderFooterView {
headerView.contentView.backgroundColor = .clear // Does not work
}
}
Para un encabezado de sección transparente completo, establezca la propiedad backgroundView
en una vista vacía:
func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
if let headerView = view as? UITableViewHeaderFooterView {
headerView.backgroundView = UIView() // Works!
}
}
Sin embargo, tenga cuidado con los posibles efectos secundarios. A menos que la vista de tabla esté configurada como "Agrupada", los encabezados de sección se ajustarán en la parte superior al desplazarse hacia abajo. Si los encabezados de sección son transparentes, se verá el contenido de la celda a través, que podría no verse muy bien.
Aquí, los encabezados de sección tienen un fondo transparente:
Para evitar esto, es mejor establecer el fondo del encabezado de sección en un color sólido (o degradado) que coincida con el fondo de su vista de tabla o controlador de vista.
Aquí, los encabezados de sección tienen un fondo degradado completamente opaco:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-06 18:55:08
Probé con la apariencia cuando estaba en cadena, y funcionó para mí.
[[UIView appearanceWhenContainedIn:[UITableViewHeaderFooterView class], [UITableView class], nil]
setBackgroundColor: [UIColor.grayColor]];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-15 09:54:22
En interfaz builder tire hacia arriba su .xib, en el elemento superior, en el inspector de atributos establece el color de fondo por defecto. Luego vaya a la vista de contenido y establezca el color de fondo allí (referencia a https://github.com/jiecao-fm/SwiftTheme/issues/24).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-25 15:22:36
Establecer backgroundView con color claro funciona bien para encabezados visibles. Si la tabla se desplaza para mostrar los encabezados en la parte inferior ,esta solución falla.
P.S.My la tabla consiste solo en encabezados sin celdas.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-22 06:41:59
Swift:
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView {
var headerView: TableViewHeader = super.tableView(tableView, viewForHeaderInSection: section) as! TableViewHeader
headerView.backgroundView.backgroundColor = UIColor.redColor()
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-11 09:10:53
Cree UIView y establezca el color de fondo, luego establézcalo en self.backgroundView (en inglés).
- (void)setupBackgroundColor:(UIColor *) color {
UIView *bgView = [[UIView alloc] initWithFrame:self.bounds];
bgView.backgroundColor = color;
self.backgroundView = bgView;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-07 10:11:31
Me siento obligado a compartir mi experiencia.
Tenía esta pieza de código que funcionó bien con iOS 10 y iOS 11 headerView?.contentView.backgroundColor = .lightGray
Entonces, de repente, decidí implementar la aplicación para iOS 9, ya que hay algunos dispositivos (iPad mini alguna generación anterior no se actualiza a ningún sistema operativo más allá de 9): La única solución que funcionó para todos iOS 9, 10 y 11 fue definir una vista base para el encabezado que luego contiene todas las demás subviews de encabezado, cablearlo desde storyboard y establecer el backgroundColor
de esa base vista.
Usted querrá tener cuidado al cablear la toma de no llamarlo: backgroundView
ya que hay una propiedad con ese nombre en algunos superclass
. Yo llamé a la mía containingView
También al cablear el control de salida, haga clic en la vista en Document Outline
para asegurarse de que no esté cableado hasta file owner
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-03 09:30:56
Tal vez porque el backgroundView no existe
override func draw(_ rect: CGRect){
// Drawing code
let view = UIView()
view.frame = rect
self.backgroundView = view
self.backgroundView?.backgroundColor = UIColor.yourColorHere
}
Eso funciona para mí.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-17 09:25:25