Создайте панель поиска, например, в приложении iOS 7 Contacts
У меня есть приложение, где у меня есть UITableView
с разделами, прокручиваемыми сбоку через sectionIndexTitlesForTableView:
.
В tableHeaderView
UITableView
я хочу добавить UISearchBar
, который я хочу вести, как тот, который Apple использует в своем новом приложении "Контакты" в iOS7. Но я не могу заставить его работать.
Строка поиска не на 100% ширины экрана, а вместо этого имеет правую сторону от индекса раздела.
Мои вопросы:
- Как получить ширину полосы поиска до 100%, если она
tableHeaderView
для UITableView
, которая имеет индекс видимого раздела?
- Как создать переход, например, в приложении "Контакты" для iOS 7, где скрывается панель навигации, а серый стол поиска находится в строке состояния?
Я уже пробовал несколько вещей, включая добавление строки поиска на панели навигации и использование UISearchBarController
, но я не могу найти хорошую документацию на веб-сайте Apple о том, как ее создать. Кроме того, руководство перехода от iOS6 к iOS7 не помогло мне.
Вот две картины, которые иллюстрируют мою проблему:
![enter image description here]()
![enter 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;
}