Domanda

Ho un UITableView con un UISearchBar come tableViews.tableHeaderView. Proprio come il nuovo Mail.app, Notes.app, ecc 3.0. Voglio nascondere la SearchBar fino a quando l'utente trascina nella sua vista.

Il mio tentativo funziona solo quando ci sei un paio di elementi nel tableView, in modo che il tableView realtà vuole scorrere. Io chiamo questo in loadview:

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

Tuttavia sembra che Apple gestisce tale serachbar diverso. Dopo draging la barra di ricerca non sembra essere limitato ai tablecells più (in Notes.app, non in Mail.app).

Ma forse Apple ha un metodo distinto per questo nuovo comportamento 3.0, e io non riesco a trovarlo?

È stato utile?

Soluzione

Forse si può provare in questo modo ...

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

Altri suggerimenti

Ha lavorato anche per me. Ho usato il seguente:

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

per interrogare l'altezza della barra di ricerca.

Questo quello che si ottiene lo stesso comportamento esatto come 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)];
}

Questo funziona per me.

- (void)viewDidLoad {
    [super viewDidLoad];

    self.tableView.bounces = YES;
}

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

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

ho dovuto scorrere prima in alto poi setContentOffset a 0, allora Searchbar sarà visibile:

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

I po 'come farlo in questo modo:

- (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];
}

In questo modo non si ha realmente bisogno di preoccuparsi di quanto è alto l'intestazione è. Funziona!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top