(iPhone / iOS) Кнопки области видимости UISearchBar закрывают первый ряд UITableView - PullRequest
3 голосов
/ 07 ноября 2011

Я знаю, что этот вопрос задавался ранее, но мне еще предстоит найти верное решение. У меня есть UITableView с UISearchBar в качестве tableHeaderView. Всякий раз, когда появляются кнопки области видимости, они закрывают первый ряд UITableView.

Я пытался использовать UITableView.contentOffset для смещения UITableView на высоту кнопок контекста, и это работает до тех пор, пока пользователь не коснется UITableView или не прокрутит его, после чего UITableView возвращается к своему исходное смещение.

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

ОБНОВЛЕНИЕ: я решил проблему, внедрив UISearchDisplayController, так как это было самое чистое и простое решение для работы. UISearchDisplayController автоматически показывает / скрывает кнопки контекста и соответственно перемещает UITableView вниз. Сначала я этого не делал, потому что хотел, чтобы UITableView оставался видимым, а не был затемнен UISearchDisplayController, однако я пришел к выводу, что затемнение не мешает какой-либо функциональности; пользователь не стал бы начинать поиск, если бы хотел продолжить смотреть на UITableView, как это было.

Ответы [ 2 ]

3 голосов
/ 07 ноября 2011

Идеи:

  • Установите tableHeaderView на UIView, который имеет UISearchBar в качестве подпредставления, и измените размер на UIView при появлении кнопок области. Надеемся, что UITableView ответит на это представление, изменив его фрейм.

  • Установите UISearchBar в качестве содержимого первой ячейки UITableView и используйте (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation, когда кнопки области видимости скрываются или отображаются. Верните правильную высоту, чтобы ячейка оживила до новой высоты.

Или вы можете использовать описанный вами метод (UISearchBar как отдельный элемент в представлении) и использовать анимационный блок для анимации перехода, чтобы он был менее резким.

[UIView animateWithDuration:1.0 animations:^
  {
     //change table view frame here
  }];
0 голосов
/ 03 декабря 2018

Если вы отрегулируете высоту ячейки заголовка в зависимости от того, активен контроллер поиска или нет, все работает хорошо

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {

    var headerHeight: CGFloat = 0.0

    if searchController.isActive
    {
        headerHeight = searchController.searchBar.frame.size.height
    }

    return headerHeight
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...