Frage

ich eine Unterklasse von UITableViewController haben. Ich habe Code, der eine UISearchBar zum / vom tableHeaderView meiner Tableview kann hinzufügen / entfernen. Hier ist der Code, den ich diese Aufgaben zu erfüllen haben:

self.tableView.tableHeaderView = uiSearchBar; //Make the search bar appear
self.tableView.tableHeaderView = nil; //Make the search bar disappear

Das Problem ist, dass ich das Hinzufügen / Entfernen des UISearchBar animiert werden will; Abgleiten in der Draufsicht, wenn ich es dann fügen Sie nach oben schieben und aus der Sicht, wenn ich es entfernen, anstatt nur erscheinen und verschwinden. Irgendwelche Vorschläge?

Danke.

War es hilfreich?

Lösung

Ich war schließlich in der Lage, dies herauszufinden. Es stellte sich heraus ziemlich einfach zu sein. Anstatt die UISearchBar auf den Tabellenkopf hinzufügen, ich es in die erste Zelle der Tabelle mit Animation UITableViewRowAnimationTop einfügen und entfernen Sie sie mit der gleichen Methode. Daraus ergibt sich die Gleitstange in und aus der Spitze. Hier ist der Code, der die Bar erscheinen läßt:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.baseUiTableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationTop];
[self.baseUiTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];

Und hier ist der Code, der die Suchleiste entfernt:

[uiSearchBar resignFirstResponder];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.baseUiTableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationTop];

Andere Tipps

Ein viel einfachere Art und Weise, die für UITableViewStyleGrouped geeignet ist (plus erfordert nicht die Anzahl der Zeilen zu ändern) ist die contentInset der Tabelle zu animieren:

CGFloat h = uiSearchBar.bounds.size.height;
UITableView *tv = self.tableView;
if (tv.tableHeaderView)
{  // hide bar
   [UIView animateWithDuration:0.3 animations:^{
      tv.contentInset = UIEdgeInsetsMake(-h, 0, 0, 0);
   } completion:^(BOOL finished) {
      tv.contentInset = UIEdgeInsetsZero;
      tv.tableHeaderView = nil;
      [tv scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
   }];
}
else
{  // show bar
   uiSearchBar.frame = CGRectMake(0, -h, tv.frame.size.width, h);
   [UIView animateWithDuration:0.3 animations:^{
      [tv scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
      tv.tableHeaderView = uiSearchBar;
   }];
}

Ich weiß, das drei Jahre nach der OP die Frage gestellt, aber da dies eine gute Alternative, um die gewünschte Wirkung zu erzielen, dachte ich, es für andere nützlich sein könnte, das gleiche Problem zu treffen.

Versuchen Sie, Ihre Tabellenansicht Scroll-animiert-so mit, dass nur die Zeile unterhalb der Suchleiste sichtbar ist, dann die Suche entfernen bar und blättern zu der gleichen Zeile ohne Animation.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top