Ответ 1
Мне удалось решить очень похожую проблему с тем, который вы испытываете, программно устанавливая UISearchController
вверх так:
Примечание ~ Ошибка сохраняется, если для параметра hidesNavigationBarDuringPresentation
не установлено значение NO.
#pragma mark - View Life Cycle
- (void)viewDidLoad {
[super viewDidLoad];
self.results = [[NSArray alloc] init];
// 1 \\ Results Table View
UITableView *searchResultsTableView = [[UITableView alloc] initWithFrame:self.tableView.frame];
[searchResultsTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:Identifier];
searchResultsTableView.delegate = self;
searchResultsTableView.dataSource = self;
// 2 \\ init search results table view & setting its table view
self.searchResultsTableViewController = [[UITableViewController alloc] init];
self.searchResultsTableViewController.tableView = searchResultsTableView;
self.searchResultsTableViewController.view.backgroundColor = [UIColor blackColor];
// 3 \\ init a search controller with it tableview controller for results
self.searchController = [[UISearchController alloc] initWithSearchResultsController:self.searchResultsTableViewController];
self.searchController.hidesNavigationBarDuringPresentation = NO; // √
self.searchController.searchResultsUpdater = self;
self.searchController.delegate = self;
self.searchController.searchBar.barTintColor = [UIColor blackColor];
// 4 \\ Make an appropriate search bar (size, color, attributes) and add it as the header
[self.searchController.searchBar sizeToFit];
self.tableView.tableHeaderView = self.searchController.searchBar;
self.tableView.tableHeaderView.backgroundColor = [UIColor blackColor];
// 5 \\ Enable presentation context
self.definesPresentationContext = YES;
self.tableView.backgroundColor = [UIColor clearColor];
self.currentUser = [PFUser currentUser];
}
Добавлена дополнительная информация:
- Конструктор интерфейсов: UIViewController (не UITableViewController)
-
Добавьте
UITableView
с ограничениями:б. * Моя панель навигации - это настраиваемая высота - ваше "Top Space to: Top Layout Guide" может быть изменено
-
Добавьте выходы Делегат и источники данных из добавленного вида таблицы в UIViewController
а. Не забывайте делать это программно:
@interface AddUsersViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> @property (weak, nonatomic) IBOutlet UITableView *tableView;
-
В Расширении интерфейса:
а. Установите делегат
UISearchConroller
и источник данных:#import "AddUsersViewController.h" #define ResultsTableView self.searchResultsTableViewController.tableView #define Identifier @"Cell" @interface AddUsersViewController () <UISearchControllerDelegate, UISearchResultsUpdating> @property (nonatomic) UISearchController *searchController; @property (nonatomic) UITableViewController *searchResultsTableViewController; @property (nonatomic, weak) UIBarButtonItem *leftBarButton; @property (nonatomic) NSArray *results; @end
Хотя это сработало для меня, я обнаружил, что существуют другие возможные сценарии, которые могут быть причиной этого. Моя "проблема" заключалась не в том, что строка поиска перемещалась на 20 пикселей (или около того), но она двигалась вверх. Я приписал это настраиваемому заголовку UINavigationBar, который включал заголовок изображения и пользовательские NavBarButtons. Имея это в виду, вот еще два возможных решения:
.
Оригинальные сценарии:
-
Вид контейнера
extendedLayoutIncludesOpaqueBars
Свойствоа. Раскадровка: отметьте √ "Under Opaque Bars" для просмотра таблиц в раскадровке.
б. Программно:
yourTableView(s).extendedLayoutIncludesOpaqueBars
= YES;
.
-
Установите
scopeButtonTitles
в пустой массив. (Ниже)self.searchController = UISearchController(searchResultsController: nil); self.searchController.searchResultsUpdater = self; self.searchController.searchBar.scopeButtonTitles = []; self.tableView.tableHeaderView = self.searchController.searchBar;
Более поздние два ответа взяты из ЭТО и могут оказаться полезными при проверке тоже.
Благодаря исследованиям и тестированию BananaNeil, он обнаружил, что если вы будете следовать моим рекомендациям и настройте searchController.searchBar.y = 0
, ваша панель поиска должна быть именно там, где вы надеялись, что это будет так. √