2012-07-15 12 views
6

Tengo un UITableView con 3 secciones. Cada uno de ellos tiene un pie de página que agregué usando viewForFooterInSection. El problema que tengo es que cuando deslizo hacia abajo la vista de tabla, el pie de página se pega a la parte inferior de la pantalla y no se desplaza como el resto de las celdas. ¿Alguien sabe cómo hacerlo así que el pie de página casi actúa como una celda, y se desplaza junto con el resto de la mesa? ¡Gracias!iOS - viewForFooterInSection pegado a la parte inferior de UITableView

Respuesta

10

De hecho, lo descubrí. Probablemente no sea la forma más inteligente de hacerlo, pero cambié mi estilo UITableView por agrupado, y eso lo solucionó. Tuve que modificar un poco el TableView para que las celdas tuvieran el mismo aspecto que si no estuvieran agrupadas (fondo claro, sin separadores), pero funcionó bien. El pie de página ya no se pega a la parte inferior de TableView.

+0

Gracias amigo ... Además, necesito agregar la altura de la sección .. De lo contrario funciona bien .. –

+0

Para ocultar el encabezado de sección que se muestra en el estilo UITableView "Agrupado", consulte https://stackoverflow.com/questions/ 19056428/how-to-hide-first-section-header-in-uitableview-grouped-style –

4

Una forma de evitar esto es si se establece el pie de página como una de las células como la última celda en la vista de desplazamiento (que se podría hacer, pero configurándolo como el último elemento de la matriz que configura el pto de)

5

Se supone que los pies de página se pegan. El truco es agregar una celda extra a cada sección y renderizar el pie de página allí. Si necesita más ayuda, agregue un comentario, pero debería ser bastante sencillo.

EDITS:

Q: bien. Estoy usando Core Data y NSFetchedResultsController para completar TableView. ¿Eso lo haría más complicado para lograr esto?

A: No, en absoluto. Anulan

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

Para añadir una celda adicional en cada sección, y en

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

prueba si el indexPath.row> de filas de su fetchedResultsController para esa sección. Si es verdadero, agregue su celda que muestra la información del pie de página.

+0

Bien. Estoy usando Core Data y NSFetchedResultsController para completar TableView. ¿Eso lo haría más complicado para lograr esto? – mhbdr

+0

No, en absoluto.Anular - (NSInteger) tableView: (UITableView *) tableView numberOfRowsInSection: Sección (NSInteger) Para añadir una celda adicional en cada sección, y - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath prueba si indexPath.row> supera las filas del control de resultados fetched para esa sección. Si es verdadero, agregue su celda que muestra la información del pie de página. –

0

Agregando una celda extra, haciéndola invisible, y renderizando su vista allí no es una forma recomendable de agregar un pie de página. Hacerlo correctamente es bastante recta hacia adelante:

- (UIView*)tableView:(UITableView*)tableView viewForFooterInSection:(NSInteger)section { 
    NSString* sectionFooter = [self tableView:tableView titleForFooterInSection:section]; 

    UIView* view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, yourWidth, yourHeight)]; //create a view- the width should usually be the width of the screen 
    UILabel* label = [[UILabel alloc] initWithFrame:someFrame]; 

    label.backgroundColor = [UIColor blueColor]; 
    label.textColor = [UIColor whiteColor]; 
    label.text = sectionFooter; 

    [view addSubview:label]; 

    return view; 
} 

También tendrá que aplicar tableView: titleForFooterInSection: si desea añadir el texto como que tengo aquí.

+2

Tu respuesta funciona para agregar un pie de página, pero ese pie de página quedará pegado en la parte inferior de la tabla, exactamente lo que no quería. – rsc

1

Tuve un problema similar cuando descubrí que mi código no funcionaba con el modo Paisaje, y solo funcionaba en el modo Retrato. En mi código anterior, cuando está en Paisaje, la vista de tabla no puede desplazarse más abajo que la vista visible y rebotó en la fila superior cuando se desplaza (no me deja ver las filas inferiores). Todo lo que tengo que cambiar es asegurarme de que la altura esté configurada en 44 como la altura de celda predeterminada. Entonces mi pie de página es básicamente otra celda con clearColor. Tenga en cuenta que mi aplicación utiliza 'AutoLayout'

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section 
{ 
    CGRect screenBounds = [UIScreen mainScreen].bounds; 
    CGFloat width = screenBounds.size.width; 
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width, 44)]; 
    view.backgroundColor = [UIColor clearColor]; 

    UILabel *label = [[UILabel alloc] initWithFrame:view.frame]; 
    label.text = @"Your Text"; 
    [view addSubview:label]; 
    return view; 
} 
Cuestiones relacionadas