posicion - la pantalla de mi iphone se ve de colores
UITableViewHeaderFooterView: no se puede cambiar el color de fondo (16)
Estoy intentando cambiar el color de fondo de UITableViewHeaderFooterView. Aunque la vista está apareciendo, el color de fondo sigue siendo el color predeterminado. Obtengo un registro de xcode que dice:
Establecer el color de fondo en UITableViewHeaderFooterView ha quedado en desuso. Utilice contentView.backgroundColor en su 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 intenté cambiar el color de fondo de la vista en el archivo xib.
¿Alguna sugerencia? Gracias.
iOS 8, 9, 10, 11 ...
La única forma de establecer cualquier color (con cualquier alfa) es usar backgroundView
:
Rápido
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 confiable (a pesar de los comentarios a continuación)
// self.contentView.backgroundColor = [UIColor clearColor]; // self.backgroundColor = [UIColor clearColor]; // self.tintColor = [UIColor clearColor];
la vista de
backgroundView
se cambia de tamaño automáticamente. (No es necesario agregar restricciones)Controle alfa con
UIColor(white: 0.5, alpha: 0.5)
obackgroundView.alpha = 0.5
.
(por supuesto, cualquier color servirá)Al usar XIB , haga que la vista raíz sea una
UITableViewHeaderFooterView
y asocie elbackgroundView
programación:Registrar 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 sobre Recetas Swift .
Asegúrese de establecer el backgroundColor de contentView
para su UITableViewHeaderFooterView
:
self.contentView.backgroundColor = [UIColor whiteColor];
Entonces funcionará.
Cree UIView y establezca el color de fondo, luego configúrelo en self.backgroundView.
- (void)setupBackgroundColor:(UIColor *) color {
UIView *bgView = [[UIView alloc] initWithFrame:self.bounds];
bgView.backgroundColor = color;
self.backgroundView = bgView;
}
Debería usar myTableViewHeaderFooterView.tintColor, o asignar una vista de fondo personalizada a myTableViewHeaderFooterView.backgroundView.
En 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 recibiendo un problema extraño que hacía que el color de fondo no llenara todo el espacio de la celda. Así que probé solo headerView.backgroundColor
y obtuve el mismo error de OP.
Establecer el color de fondo en UITableViewHeaderFooterView ha quedado en desuso. Utilice contentView.backgroundColor en su lugar.
Así que ahora todo funciona bien y sin advertencias usando headerView.backgroundView.backgroundColor
En iOS 7 contentView.backgroundColor
funcionó para mí, tintColor
no.
headerView.contentView.backgroundColor = [UIColor blackColor];
Aunque clearColor
no funcionó para mí, la solución que encontré es establecer backgroundView
propiedad backgroundView
en una imagen transparente. Tal vez ayudará a alguien:
UIGraphicsBeginImageContextWithOptions(CGSizeMake(1, 1), NO, 0.0);
UIImage *blank = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
headerView.backgroundView = [[UIImageView alloc] initWithImage:blank];
En mi caso, probé todo lo que se indicó anteriormente, pero seguía apareciendo la advertencia "Ha quedado obsoleto el ajuste del color de fondo en UITableViewHeaderFooterView. Utilice en su lugar contentView.backgroundColor". luego probé esto: dentro del archivo xib, el color de fondo para la vista del encabezado se seleccionó para borrar el color en lugar del predeterminado una vez que lo cambié al valor predeterminado, la advertencia desapareció.
Establecer el BackgroundView con un color claro funciona bien para los encabezados visibles. Si la tabla se desplaza para mostrar encabezados en la parte inferior, esta solución falla.
La tabla PSMy solo consiste en encabezados sin celdas.
Intenté con la aparición de la cadena WhenContainedIn, y funcionó para mí.
[[UIView appearanceWhenContainedIn:[UITableViewHeaderFooterView class], [UITableView class], nil]
setBackgroundColor: [UIColor.grayColor]];
Me siento obligado a compartir mi experiencia. Tenía este código que funcionaba bien con iOS 10 y iOS 11 headerView?.contentView.backgroundColor = .lightGray
Luego, de repente, decidí implementar la aplicación para iOS 9, ya que hay algunos dispositivos (el iPad mini, una generación anterior no se actualiza a ningún sistema operativo más allá de 9) - La única solución que funcionó para todos los iOS 9, 10 y 11 era definir una vista base para el encabezado que luego contiene todas las otras subvistas de encabezado, conectarlo desde el guión gráfico y establecer el backgroundColor
de esa vista base.
Deberá tener cuidado cuando conecte el tomacorriente para no llamarlo: vista de backgroundView
ya que ya hay una propiedad con ese nombre en alguna superclass
. Llamé al mío que containingView
View
Además, cuando conecte el control de salida, haga clic en la vista en el Document Outline
para asegurarse de que no esté conectado al file owner
Para colores de fondo sólidos, la configuración de 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 los colores con transparencia, incluido .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 completa, 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, ten cuidado con los posibles efectos secundarios. A menos que la vista de tabla esté configurada en "Agrupado", los encabezados de sección se ajustarán en la parte superior cuando se desplace hacia abajo. Si los encabezados de las secciones son transparentes, se verá el contenido de la celda, lo que podría no verse muy bien.
Aquí, los encabezados de las secciones tienen fondo transparente:
Para evitar esto, es mejor establecer el fondo del encabezado de la sección en un color sólido (o degradado) que coincida con el fondo de la vista de tabla o el controlador de vista.
Aquí, los encabezados de sección tienen un fondo degradado completamente opaco:
Para un color claro, yo uso
self.contentView.backgroundColor = [UIColor clearColor];
self.backgroundView = [UIView new];
self.backgroundView.backgroundColor = [UIColor clearColor];
A mí me parece bien.
Si está personalizando una celda de encabezado de sección con Storyboard / Nib , asegúrese de que el color de fondo sea el predeterminado para la vista "Encabezado de sección de tabla".
Y si subclasifica UITableViewHeaderFooterView
, y usa plumín, entonces lo que tiene que hacer es crear un IBOutlet
para la vista de contenido y nombrarlo, por ejemplo. containerView
. Esto no debe confundirse con contentView
, que es padre de esta vista de contenedor.
Con esa configuración, cambia el color de fondo de containerView
lugar.
si creaste una subclase personalizada de UITableViewHeaderFooterView
con archivo xib
, entonces debes anular setBackgroundColor
. Manténlo vacío.
-(void)setBackgroundColor:(UIColor *)backgroundColor {
}
Y esto resolverá tu problema.
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 mi
Rápido:
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView {
var headerView: TableViewHeader = super.tableView(tableView, viewForHeaderInSection: section) as! TableViewHeader
headerView.backgroundView.backgroundColor = UIColor.redColor()
}