2009-07-03 15 views
25

Tengo un UITableView con UISearchBar como tableViews.tableHeaderView. Al igual que el nuevo Mail.app, Notes.app, etc. en 3.0. Quiero ocultar SearchBar hasta que el usuario lo arrastre a la vista.Desplácese UITableView para que el encabezado no sea visible

Mi intento solo funciona cuando hay un par de elementos en la vista de tabla, por lo que la vista de tabla realmente desea desplazarse. Yo llamo esto en loadView:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; 
[self._tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:NO]; 

Sin embargo, parece que Apple maneja dicho serachbar de manera diferente. Después de arrastrar la barra de búsqueda, parece que ya no está limitada a las celdas de tabla (en Notes.app, no en Mail.app).

¿Pero quizás Apple tiene un método distinto para ese nuevo comportamiento 3.0, y simplemente no puedo encontrarlo?

+0

Pedido par de nuevas propiedades 'UIViewController'. [https://developer.apple.com/library/prerelease/ios/documentation/UserExperience/Conceptual/TransitionGuide/AppearanceCustomization.html#//apple_ref/doc/uid/TP40013174-CH15-SW1](https://developer. apple.com/library/prerelease/ios/documentation/UserExperience/Conceptual/TransitionGuide/AppearanceCustomization.html#//apple_ref/doc/uid/TP40013174-CH15-SW1) –

Respuesta

33

Tal vez usted puede tratar de esta manera ...

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

Funciona sin problemas. – OlivaresF

+1

Necesita hacerlo cada vez después de volver a cargar la vista de tabla. [self.tableView reloadData]; – Thiru

+9

No funciona cuando el número de filas es menor que el número total de filas que caben en la pantalla. ¿Alguna solución provisional conocida para este escenario? – Zorayr

25

trabajado para mí también. Utilicé lo siguiente:

[self.tableView setContentOffset:CGPointMake(0, self.searchDisplayController.searchBar.frame.size.height) animated:NO]; 

para consultar el alto de la barra de búsqueda.

+1

Encantador y simple, aunque agregué el parámetro animado: YES para mejorar el aspecto de la cosa. – PKCLsoft

+0

¡Perfecto! Simplemente lo agregué en viewWillAppear y obtuve el resultado que estaba buscando. – anasaitali

10

Ésta se obtiene el mismo comportamiento exacto como iPod.app:

- (void)viewWillAppear:(BOOL)animated 
{ 
[super viewWillAppear:animated]; 

CGFloat searchBarHeight = CGRectGetHeight([[[self searchDisplayController] searchBar] frame]); 
if ([[self tableView] contentOffset].y < searchBarHeight) 
    [[self tableView] setContentOffset:CGPointMake(0, searchBarHeight)]; 
} 
3

Esto funciona para mí.

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.tableView.bounces = YES; 
} 

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    [self.tableView setContentOffset:CGPointMake(0, 44)]; 
} 
-2

me gusta hacerlo de esta manera:

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    // Hide the table view header by default. 
    NSIndexPath *index = [NSIndexPath indexPathForRow:0 inSection:0]; 
    [self.tableView scrollToRowAtIndexPath:index atScrollPosition:UITableViewScrollPositionTop animated:NO]; 
} 

De esta manera usted realmente no necesita preocuparse por la altura de su cabecera es. ¡Simplemente funciona!

+1

La solución bloquea la aplicación si la vista de tabla no ha cargado las filas o tiene cero filas. – Zorayr

+0

Oh gotcha. Gracias por el comentario Zorayr – Caborca87

0

tuviera que desplazarse primero hacia arriba y luego setContentOffset-0, SearchBar Entonces será visible:

self.tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0), atScrollPosition: UITableViewScrollPosition.Top, animated: false) 
self.tableView.setContentOffset(CGPointMake(0, 0), animated: false) 
Cuestiones relacionadas