2011-02-28 9 views
8

Entiendo que hay una propiedad tableHeaderView, pero cada vez que agrego mi vista a eso, no se oculta encima del área de desplazamiento.¿Cómo puedo agregar un UIView sobre el área visible de una UITableView?

Lo que me gustaría tener es mi vista personalizada que se muestra cuando se abre la vista de tabla y se sostiene y se ve mi UIView a la vista. Esto se hace en muchas aplicaciones para poner un logotipo o algo así oculto hasta que un usuario tira hacia abajo en la vista de tabla (Twitter/Facebook cuando se realiza el menú desplegable).

actualmente estoy usando el siguiente y no se pone fuera de la vista:

UILabel *l = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300, 20)]; 
    l.text = @"Hidden Text"; 
    l.textColor = [UIColor redColor]; 
    self.tableView.tableHeaderView = l; 
    [l release]; 

Respuesta

13

Desde UITableView es en realidad un UIScrollView con algunas funciones adicionales, puede utilizar contentInset para obtener el efecto deseado. El truco es usar un valor negativo para el recuadro superior. Normalmente, esto ocultará su vista de encabezado, pero seguirá siendo visible cuando la mesa rebote.

Así, después de agregar la etiqueta a la vista de encabezado, acaba de establecer la contentInset así:


    UILabel *l = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300, 20)]; 
    l.text = @"Hidden Text"; 
    l.textColor = [UIColor redColor]; 
    self.tableView.tableHeaderView = l; 

    //add this 
    [self.tableView setContentInset:UIEdgeInsetsMake(-l.bounds.size.height, 0.0f, 0.0f, 0.0f)]; 

    [l release]; 
+0

¡Perfecto! Esto es exactamente lo que estaba buscando. ¡Muchas gracias! –

1

La mejor solución es añadir su vista a la cabecera, como se había mencionado que ha intentado, y luego en el viewDidLoad de su controlador desplaza la vista de tabla hacia abajo mediante programación hasta que se oculta la vista de encabezado que quería ocultar. Esto se puede hacer de diferentes maneras. La más sencilla es probablemente:

[self.tableView setContentOffset: CGPointMake(0, myHeaderHeight)]; 
+0

El problema con esta solución es que una vez que se muestra no retrocederá para ocultarla nuevamente. Quiero que solo se alivia cuando se baja la vista de tabla, cuando sueltan el dedo, se recuperará para ocultar UIView. –

+0

Tenga en cuenta que establecer 'contentOffset' en' viewDidLoad' no tiene ningún efecto. Puede establecer el desplazamiento, por ejemplo, en 'viewWillAppear:'. – Palimondo

0

Basta con tener una vista de encabezado 0-altura, y luego tener una vista secundaria de ese ser colocado con una negativo y, de modo que el borde inferior de la subvista sea la parte superior de la vista.

0
UIWindow* window = [[UIApplication sharedApplication].delegate.window; 
[window addSubview: your-overlayview]; 
Cuestiones relacionadas