【发布时间】:2018-03-12 14:01:36
【问题描述】:
在 iOS 11 发布之前,我在 UITableViewController 中添加了一个搜索栏。它隐藏在导航栏下,当用户向上滚动表格时可见。在 iOS11 上,调整 contentOffset 或 tableview.bound 不会正确隐藏搜索栏,有时它确实有效,有时它也会隐藏第一行。因此,我决定将搜索栏移至导航栏。但是,由于某种原因,我在任何地方都看不到它。这是我在 viewDidLoad 的代码
YearTableViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
if (@available(iOS 11.0, *)) {
//iOS11 -> on navigation bar
self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.searchController.searchResultsUpdater = self;
self.searchController.delegate = self;
self.searchController.searchBar.delegate = self;
self.searchController.searchBar.barStyle = UISearchBarStyleDefault;
self.searchController.searchBar.showsCancelButton = NO;
[self.searchController.searchBar sizeToFit];
self.searchController.hidesNavigationBarDuringPresentation = NO;
self.searchController.dimsBackgroundDuringPresentation = YES;
[self.navigationItem setSearchController:self.searchController];
[self.navigationController.navigationBar setPrefersLargeTitles:NO];
[self.navigationItem setLargeTitleDisplayMode:UINavigationItemLargeTitleDisplayModeNever];
self.definesPresentationContext = YES;
} else {
//iOS10 or previous -> on table view
UITableViewController *tableViewControllerForSearch = [[UITableViewController alloc]initWithStyle:UITableViewStylePlain];
tableViewControllerForSearch.tableView.dataSource = self;
tableViewControllerForSearch.tableView.delegate = self;
tableViewControllerForSearch.tableView.estimatedRowHeight = 40;
tableViewControllerForSearch.tableView.rowHeight = UITableViewAutomaticDimension;
self.searchController = [[UISearchController alloc] initWithSearchResultsController:tableViewControllerForSearch];
self.searchController.searchResultsUpdater = self;
self.searchController.delegate = self;
self.searchController.searchBar.frame = CGRectMake(self.searchController.searchBar.frame.origin.x, self.searchController.searchBar.frame.origin.y, self.searchController.searchBar.frame.size.width, 44.0);
self.tableView.tableHeaderView = self.searchController.searchBar;
self.definesPresentationContext = YES;
// No border between cells
tableViewControllerForSearch.tableView.separatorStyle = UITableViewCellSelectionStyleNone;
}
编辑:2017/10/20 正如建议的那样,我已经重命名并简化了结构。
我在情节提要上有以下结构。 UINavigationController:初始视图控制器 YearPageViewController:里面有YearTableViewController
在 iOS10 上,它运行良好。在 iOS 11 上,我看不到 searchBar。 感谢您的意见。
【问题讨论】:
-
为什么要设置在parentViewController上?
-
同时将你的 UITableViewController 命名为“searchController”是令人困惑的
-
如果我做了[self.navigationItem setSearchController:self.searchController],我就看不到搜索栏了。
-
您找到解决方案了吗? @yoshitech
标签: ios objective-c