#ios #arrays #uitableview #uisearchbar
#iOS #массивы #uitableview uitableview #панель uisearchbar
Вопрос:
У меня настроены TableView и панель поиска, и оба пока работают нормально. Проблема в том, что UISearchBar накладывает первый элемент моего TableView.
Я не могу использовать XIB или раскадровки в этом проекте.
Определение и создание экземпляра TableView находится в галактике в классе (импортируемом импортируемым мной классом …) далеко, далеко — не так просто получить доступ.
Я перемещаю (создаю экземпляр) панель поиска на экране с помощью:
self.searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0, 0, 320, 44)];
[self.view addSubview:self.searchBar];
self.searchBar.delegate = self;
Я попытался переместить его на 0, -44, но затем экран не остается на панели поиска, он перемещается обратно вниз.
Если я попытаюсь переместить UITableView с:
self.tableView.frame = CGRectMake(0, 0, 320, 500);
он также перемещает панель поиска.
Итак, допустим, если я установлю начало строки поиска равным 0,0, а начало табличного представления — 0,44, я получу экран с (объектами в этом порядке):
- Серое пространство высотой строки поиска / ячейки представления таблицы
- Панель поиска (все еще перекрывает первую ячейку моего табличного представления
- другие ячейки
Как я могу решить эту проблему? Я думаю, что самым простым способом было бы добавить пустой объект в мой массив данных, чтобы строка поиска не перекрывала ничего важного, но это был бы не самый лучший способ решения проблемы.
Кто-нибудь может сказать мне, как я могу добавить / вставить объект в массив, а затем скопировать в него другой массив, начиная с индекса 1, чтобы мой пустой объект оставался там?
Ответ №1:
Вы можете использовать свойство contentInset в своем TableView. Просто установите верхнюю вставку на высоту строки поиска.
self.tableView.contentInset = UIEdgeInsetsMake(self.searchBar.frame.size.height, 0, 0, 0);
Это должно решить проблему.
Комментарии:
1. Вау, действительно хорошее решение, спасибо! Не могли бы вы сказать мне, как сделать так, чтобы экран начинался с 0,0,0,0, чтобы вам приходилось прокручивать вверх, если вы хотите выполнить поиск? Например, в приложении iPhone Music, когда вы хотите искать песни 😉
2. Вы можете установить панель поиска как tableHeaderView. Если вы хотите, чтобы он был изначально скрыт, вам нужно будет немного настроить contentOffset для TableView. Это сработало бы сразу, но не совсем так, как в музыке. Чтобы добиться этого, вам нужно будет реализовать метод scrollViewDelegate и определить, показывать ли панель поиска или скрывать ее (если contentOffset для TableView меньше, чем SearchBar.frame.size.height * 0.5f, чем показывать, в другом случае скрыть его).
3. Хорошо, спасибо за подход, я постараюсь заставить его работать ;)!