Как правильно анимировать UISearchbar в пользовательском представлении с представлением заголовка и UITableview? - PullRequest
0 голосов
/ 04 ноября 2011

У меня есть пользовательский UIViewController, созданный из nib-файла со следующей иерархией представлений:

Nib

... где на левой стороне оранжевая область представляет собой «представление заголовка»с двумя UIB-кнопками и UILabel в центре, а синяя область представляет собой UITableView;все под одним UIView.

Во время выполнения это будет выглядеть более или менее, как показано ниже:

Render

На этом этапе всякий раз, когда пользователь будет нажимать напанель поиска, я бы ожидал скрыть как панель навигации, так и вид заголовка с панелью поиска, перемещенной в верхнюю часть окна.

Однако это не так, поскольку панель навигации автоматически выйдет из окна ивид заголовка переместится наверх, но все равно останется на сцене;остальные останутся на своих местах.

На этом этапе мне пришлось добавить следующий код, чтобы переместить представление заголовка из окна:

- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller
{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.2];

    CGRect frame = self.headerView.frame;
    frame.origin.y -= frame.size.height;
    self.headerView.frame = frame;

    [UIView commitAnimations];
}

, что приведет к:

search

... Как вы, возможно, уже заметили, заголовок будет нормально перемещаться, но строка поиска будет придерживаться своей исходной позиции.

Я пыталсяизмените положение как self.view, так и по таблице поиска, но не повезло.

Что мне делать?Спасибо.

1 Ответ

8 голосов
/ 14 ноября 2011

Убедитесь, что вы реализовали searchDisplayControllerWillBeginSearch: и searchDisplayControllerWillEndSearch: UISearchDisplayDelegate и используете что-то похожее на:

[UIView beginAnimations:nil context:NULL];

CGRect headerViewFrame = self.headerView.frame;
headerViewFrame.origin.y -= 44.0f;
self.headerView.frame = headerViewFrame;

CGRect tableViewFrame = self.tableView.frame;
tableViewFrame.origin.y -= 44.0f;
self.tableView.frame = tableViewFrame;

[UIView commitAnimations];

и

[UIView beginAnimations:nil context:NULL];

CGRect headerViewFrame = self.headerView.frame;
headerViewFrame.origin.y += 44.0f;
self.headerView.frame = headerViewFrame;

CGRect tableViewFrame = self.tableView.frame;
tableViewFrame.origin.y += 44.0f;
self.tableView.frame = tableViewFrame;

[UIView commitAnimations];

... соответственно.

...