2011-03-28 17 views
16

me han puesto en marcha un "tirón para refrescar" en mi tableView como el iPhone aplicación de Twitter o Facebook.
Mi tableView tiene secciones con vistas cabeza. Cuando el tableView está en "Modo de actualización", así que cuando saqué el tableView para actualizar, configuré el contentInset del tableView para mostrar el tableView de cierta manera. En este momento, si presiono TableView, los encabezados de UITableView ya no se desplazan a la parte superior de UITableView. Ver las siguientes capturas de pantalla:encabezados de sección en UITableView cuando inserción de la tableview se cambia

screenshot 1

screenshot 2

¿Cómo puedo arreglar eso para hacer las cabeceras desplácese como se esperaba?

Gracias!

Respuesta

25

que tenían el mismo problema cuando se utiliza contentInset y se fijaron mediante la adición de código para scrollViewDidScroll: para actualizar el contentInset dinámicamente mientras que en el estado de "carga".

if(refreshState == kLoading) { 
    if(scrollView.contentOffset.y >= 0) 
     scrollView.contentInset = UIEdgeInsetsZero; 
    else 
     scrollView.contentInset = UIEdgeInsetsMake(MIN(-scrollView.contentOffset.y, kPullHeight), 0, 0, 0); 
}  
+0

¡Gracias, estoy ansioso por probar eso! ¿Puedes arrojar algunas luces sobre mí y explicarme qué es kPullHeight? – MartinMoizard

+0

¡Genial! Gracias, lo encontré perfecto para mis necesidades. – Ariel

+8

Este truco hace que el desplazamiento perder su inercia cuando el usuario levanta su dedo cuando el tirón para refrescar la vista se hace visible. – samvermette

1

Al hacer esto, por lo general usan la cabecera de toda la tabla en lugar UITableView:

@property(nonatomic, retain) UIView *tableHeaderView 

... en lugar de contentInsets. Hubo una gran cantidad de errores con contentInsets todo el camino de regreso a iOS 2.x días, y no estoy seguro de que todos hayan sido corregidos. ¿Hay alguna razón por la que no puedas usar un encabezado de tabla?

+1

¿Tiene una implementación de un UITableView-pull-a de actualización mediante el tableHeaderView? – MartinMoizard

1

Intente de esta forma agregar el controlador de vista de inserción.

  • Crear un controlador de vista de tabla y agregarlo como la vista de sub controlador de vista existente.
  • luego asignar su vista de tabla y refrescar los controladores a las propiedades del controlador tableview.

    UITableViewController *newTableViewController = [[UITableViewController alloc] init]; 
    newTableViewControler.tableView = <yourTableView>; 
    
    <yourRefreshController> = [[UIRefreshControl alloc] init]; 
    [<yourRefreshController> addTarget:self 
              action:@selector(refreshTableView:) 
            forControlEvents:UIControlEventValueChanged]; 
    
    newTableViewController.refreshControl = _chatListRefreshControl; 
    [self addChildViewController:newTableViewController]; 
    
Cuestiones relacionadas