【问题标题】:SearchController on Navigation Bar is invisible on iOS11导航栏上的 SearchController 在 iOS11 上是不可见的
【发布时间】: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


【解决方案1】:

添加呢

    self.navigationItem.hidesSearchBarWhenScrolling = NO;

显然搜索栏默认是隐藏的,只有在滚动时才能看到。

【讨论】:

  • 我会在以后的更新中尝试这个,但到目前为止它还不起作用。我可以创建一个具有类似结构(视图控制器堆栈)的示例应用程序,并且我怀疑将 UIPageViewController 作为 UITableViewController 的父级会导致问题。谢谢。
【解决方案2】:

希望对iOS11上的你有所帮助

if #available(iOS 11.0, *) {
     self.navigationItem.hidesSearchBarWhenScrolling = NO; 
} 

我知道为什么您的视图控制器是堆栈。在 dimsBackgroundDuringPresentation 中设置 'NO' 标志

self.searchController.dimsBackgroundDuringPresentation = NO;

【讨论】:

  • 我会在以后的更新中尝试这个,但到目前为止它不起作用。我可以创建一个具有类似结构(视图控制器堆栈)的示例应用程序,并且我怀疑将 UIPageViewController 作为 UITableViewController 的父级会导致问题。谢谢。
  • 在你的代码上改变这个标志它工作正常 self.searchController.dimsBackgroundDuringPresentation = NO;
猜你喜欢
  • 2016-06-14
  • 2018-11-14
  • 2016-10-25
  • 1970-01-01
  • 1970-01-01
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多