Создайте панель поиска, например, в приложении iOS 7 Contacts

У меня есть приложение, где у меня есть UITableView с разделами, прокручиваемыми сбоку через sectionIndexTitlesForTableView:.

В tableHeaderView UITableView я хочу добавить UISearchBar, который я хочу вести, как тот, который Apple использует в своем новом приложении "Контакты" в iOS7. Но я не могу заставить его работать.

Строка поиска не на 100% ширины экрана, а вместо этого имеет правую сторону от индекса раздела.

Мои вопросы:

  • Как получить ширину полосы поиска до 100%, если она tableHeaderView для UITableView, которая имеет индекс видимого раздела?
  • Как создать переход, например, в приложении "Контакты" для iOS 7, где скрывается панель навигации, а серый стол поиска находится в строке состояния?

Я уже пробовал несколько вещей, включая добавление строки поиска на панели навигации и использование UISearchBarController, но я не могу найти хорошую документацию на веб-сайте Apple о том, как ее создать. Кроме того, руководство перехода от iOS6 к iOS7 не помогло мне.

Вот две картины, которые иллюстрируют мою проблему: enter image description hereenter image description here

Ответы

Ответ 1

Два основных отличия от того, как Apple делает свое приложение, которое решит ваши проблемы.

Во-первых, их UISearchBar не является headerView для tableView. Это отдельный вид над таблицей. Вам нужно будет изменить свой UITableViewController на UIViewController, у которого UITableView расположен чуть ниже вашего UISearchBar.

Во-вторых, их UISearchBar имеет связанный с ним контроллер отображения поиска. Предполагая, что вы используете файл раскадровки, это поставляется вместе для вас - просто добавьте UISearchBar с помощью Display Display Controller. Это будет обрабатывать все переходы под панель состояния для вас.

Ответ 2

Две вещи:

1) Установите tableView sectionIndexBackgroundColor в [UIColor clearColor].

2) Внедрить метод viewDidLayoutSubviews для исправления фрейма для UISearchBar

- (void)viewDidLayoutSubviews {
  [super viewDidLayoutSubviews];
  CGRect barFrame = self.searchBar.frame;
  barFrame.size.width = self.view.bounds.size.width;
  self.searchBar.frame = barFrame;
}