Pregunta

Si tiene un UITableView simple (no agrupado) con una sola fila, el resto de la pantalla se llena con celdas en blanco o vacías. ¿Cómo se cambia la apariencia de estas celdas en blanco? Primero, pensé que tendrían la apariencia de la celda utilizada en la vista de tabla, pero parece que no.

La gente de Cultured Code (Things) ha hecho un buen trabajo modificando estas celdas, pero no puedo pensar de inmediato en una forma de cambiar su apariencia.

¿Algún consejo?

¿Fue útil?

Solución

Aunque no es exactamente lo que está buscando, también puede cambiarlo para mostrar solo una región en blanco (en lugar de celdas en blanco) configurando una vista de pie de página en la tabla. Un UIView de altura 0 hará el truco.

Otros consejos

Basado en respuesta de samvermette , pero modificado para usar una imagen de fondo directamente en lugar de componer una imagen de una subclase UITableViewCell. La respuesta de Sam es buena, pero será menos eficaz que simplemente crear una imagen de fondo directamente.

Cree una subclase UIView, en este ejemplo lo llamé CustomTiledView, y agregue el siguiente código a la clase:

- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed:@"tableview_empty_cell_image"];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextScaleCTM (context, 1, -1); 
CGContextDrawTiledImage(context, 
                        CGRectMake(0, 0, rect.size.width, image.size.height), 
                        [image CGImage]); 
}

Agregue el siguiente código a su tableviewcontroller:

- (CGFloat)tableView:(UITableView *)tableView 
           heightForFooterInSection:(NSInteger)section {
    // this can be any size, but it should be 1) multiple of the 
    // background image height so the last empty cell drawn
    // is not cut off, 2) tall enough that footer cells
    // cover the entire tableview height when the tableview
    // is empty, 3) tall enough that pulling up on an empty
    // tableview does not reveal the background.
        return BACKGROUND_IMAGE_HEIGHT * 9; // create 9 empty cells
}

- (UIView *)tableView:(UITableView *)tableView 
            viewForFooterInSection:(NSInteger)section {
    CustomTiledView *footerView = [[CustomTiledView alloc] init];
    return [footerView autorelease];
}

Finalmente, deberá establecer el contenido del contenido inferior de su vista de tabla en el valor negativo del valor devuelto por -tableView: heightForFooterInsection: En este ejemplo sería -1 * BACKGROUND_IMAGE_HEIGHT * 9 . Puede configurar el contenido del recuadro inferior desde el Inspector de tamaño de Interface Builder o configurando la propiedad self.tableView.contentInset desde tableviewcontroller.

¡Salud!

Establecí una subclase UIView de ~ 300 px de alto en mis vistas de encabezado y pie de tabla tableView, ajustando las inserciones tableView para que compensen estas vistas (establezca las inserciones superior e inferior en -300px).

Mi subclase UIView implementa el método drawRect, en el que uso CGContextDrawTiledImage () para dibujar un UITableViewCell vacío repetidamente:

- (void)drawRect:(CGRect)rect {

    UIGraphicsBeginImageContextWithOptions(CGSizeMake(300, 46),NO,0.0);
    emptyCell = [[SWTableViewCell alloc] initWithFrame:CGRectZero];
    [emptyCell drawRect:CGRectMake(0, 0, 300, 46)];
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    [emptyCell release];
    UIGraphicsEndImageContext();

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextScaleCTM (context, 1, -1); // this prevents the image from getting drawn upside-down
    CGContextDrawTiledImage(context, CGRectMake(0, 0, 300, 46), [newImage CGImage]);
}

En mi caso, las celdas de mi mesa tienen 46 píxeles de alto, por lo que si quiero que la subclase UIView contenga 8 de estas celdas vacías, necesito que tenga 368 píxeles de alto.

De http://jomnius.blogspot.com /2011/03/hide-uitableview-empty-cell-separator.html La manera fácil es definir que la tabla no tiene líneas de separación de celdas:

self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

La forma difícil, si necesita líneas de separación, es definir que la tabla no tiene líneas de separación y crear líneas de separación de celdas como parte de UITableViewCell personalizada. Parte inferior de la celda, obviamente, y muy probablemente usando una imagen gráfica realmente delgada. Recuerde definir el modo y el tamaño automático de la imagen correctamente.

Otra forma es definir una tabla vacía de UITableViewFooterView:

UIView *footer =
    [[UIView alloc] initWithFrame:CGRectZero];
self.myTable.tableFooterView = footer;
[footer release];

Si simplemente desea cambiar la altura de las "celdas vacías" cuando no hay celdas en su TableView: debe establecer la propiedad rowHeight de su UITableView (la implementación de tableView: heightForRowAtIndexPath: no tiene efecto en TableViews vacías) . Si hay celdas en su TableView y ha implementado tableView: heightForRowAtIndexPath: , la altura de la última fila se usará para celdas vacías.

Probablemente tendrá que crear una subclase personalizada de UITableView que llene el fondo con la apariencia de celdas en blanco.

- (void)drawRect:(CGRect)rect {
  [super drawRect: rect];

  // draw your background here if the rect intersects with the background area
}

Creo que el método de usar el método UITableView tableView: viewForFooterInSection: no funcionará en el caso en que la tabla esté vacía, es decir, sin celdas. En ese caso, puede utilizar la técnica Answerbot propuesta puede reutilizarse para rellenar el UIView creado en la vista de pie de página de la tabla explícitamente, como la siguiente:

    CGRect cellRect = CGRectMake(0, 0, table.bounds.size.width, table.bounds.size.height);
    CustomTiledView *footerView = [[[CustomTiledView alloc] initWithFrame:cellRect] autorelease];
    table.tableFooterView = footerView;

Para sws 4.0 :

self.tableView.tableFooterView = UIView(frame: CGRect.zero)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top