2012-04-23 29 views
11

Tengo dificultades para animar la eliminación del contenido del encabezado/pie de página de una tabla con animación. Creo que puedo llamar a removeFromSuperview en el contenido del encabezado, o simplemente asignar el encabezado a cero, pero no sé cómo animarlo. Un simple bloque de animación no hace nada: ¿cómo puedo desvanecer una vista (una etiqueta en este caso) dentro/fuera?Animar un encabezado y pie de página de UITableView

+0

¿Está utilizando una instancia UITableViewController, UITableViewDelegate o UITableViewDataSource o alguna otra clase de controlador de vista? Si está utilizando un UITableViewDataSource, debe usar la sección tableView: (UITableView *) tableView titleForHeaderInSection: (NSInteger) para eliminar pragmáticamente los encabezados y tableView: (UITableView *) tableView titleForFooterInSection: (NSInteger) sección para eliminar los pies de página mediante programación. –

+0

Estoy usando un controlador de tabla de vista. Solo para aclarar, quiero desvanecer la vista de encabezado de la tabla, no el encabezado de sección –

Respuesta

24

Escribí un ejemplo de cómo eliminar completamente la vista de encabezado usando bloques de animación.

[UIView beginAnimations:nil context:NULL]; 
[self.tableView setTableHeaderView:nil]; 
[UIView commitAnimations]; 

Por supuesto, esto supone que esta animación está llamado interior de su clase UITableViewController.

Simplemente eliminar la vista de encabezado de la supervista no funciona porque la vista de tabla no sabe redimensionarse para llenar lo que solía ser la vista de encabezado. La configuración de la vista de encabezado hace que la vista de tabla se actualice de forma animada.

Si esto no funciona, verifique su (s) asignación (es) de la instancia de tableView.

1

He encontrado las siguientes dos opciones a ambos trabajan bien:

opción 1

[UIView animateWithDuration:0.15 
         delay:0.0 
     options: UIViewAnimationCurveEaseOut 
       animations:^{deleteLabel.alpha = 0;} 
      completion:nil]; 

opción 2

[UIView beginAnimations:nil context:nil]; 
deleteLabel.alpha = 0.0; 
[UIView commitAnimations]; 
+2

Solo una nota menor para cualquiera que siga esto, la opción anterior debe ser UIViewAnimationOptionCurveEaseOut –

0

Este es un trabajo perfectamente "tal cual", y no lo hago cuidado sobre la animación

[myPrettyViewControllerInstance letUpdatePrettyViewNow]; 
    [[self tableView] beginUpdates]; 
    [[self tableView] setTableHeaderView:[myPrettyViewControllerInstance view]]; 
    [[self tableView] endUpdates]; 

pero si nos no necesitamos más

[[self tableView] setTableHeaderView:nil]; 

eso es todo lo que necesitamos, realmente (si no Fadeout - verificar las condiciones de la

[[self tableView] setTableHeaderView:nil]; 

y no necesitamos

[UIView beginAnimations:nil context:NULL]; 
    [[self tableView] setTableHeaderView:nil]; 
    [UIView commitAnimations]; 

nop

[[self tableView] beginUpdates]; 
    [[self tableView] setTableHeaderView:nil]; 
    [[self tableView] endUpdates]; 

nop

[[self tableView] setTableHeaderView:nil]; 
    [[self tableView] reloadData]; 

noo ..

+0

Esto funciona para las celdas, pero no para los encabezados de tabla. – Gujamin

+0

Lo sentimos, pero funciona para encabezados (no sé sobre celdas). Lo uso en mi proyecto reciente y todo está trabajado. ¿Puedes proporcionar el código fuente? – WINSergey

+0

No funcionó para insertar una vista de encabezado de tabla. Uso de guiones gráficos y diseño automático. La vista solo aparece. No animar en – Gujamin

8

que terminó con la siguiente solución simple. Anima la eliminación del encabezado.

[self.tableView beginUpdates]; 
self.tableView.tableHeaderView = nil; 
[self.tableView endUpdates]; 

que se dan cuenta de esto se menciona en la respuesta de WINSergey, pero me pareció que su explicación un poco confuso.

1

que tenían el mismo problema, quería controlar cómo se elimina la cabecera, aquí está mi método:

En viewDidLoad:

UIView *transView = [[UIView alloc] initWithFrame:CGRectMake(0.f, 0.f, 320.f, 200.f)]; 
transView.backgroundColor = [UIColor clearColor]; 
self.headerView = transView; 
[transView release]; 

[self.tableView setTableHeaderView:self.headerView]; 

Luego, cuando es necesario eliminar cabecera:

[UIView animateWithDuration:.3f 
         delay:.0f 
        options: UIViewAnimationOptionBeginFromCurrentState 
       animations:^{ 
        self.headerView.frame = CGRectMake(0.0f, 0.0f, 320.f, 0.0f); 
       } 
       completion:^(BOOL finished) { 
         [tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:section] atScrollPosition:UITableViewScrollPositionTop animated:YES]; 
       }]; 
0

Tuve que poner 2 animaciones para que funcionase.

[UIView animateWithDuration:2.0f animations:^{ 
     mylbl.alpha = 0.1 ; 
    } completion:^(BOOL finished) { 
     [UIView animateWithDuration:2.0f animations:^{ 
      mylbl.alpha = 1.0 ; 
     }]; 
    }]; 
Cuestiones relacionadas