UISearchBar 范围空白

Posted

技术标签:

【中文标题】UISearchBar 范围空白【英文标题】:UISearchBar Scope empty space 【发布时间】:2020-04-16 07:51:52 【问题描述】:

我的应用程序中有UISearchController

-(void)setSearchBar 
    self.resultsController = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain];
    [self.resultsController.tableView registerClass:UITableViewCell.self forCellReuseIdentifier:@"SearchTitleCell"];
    self.resultsController.tableView.dataSource = self;
    self.resultsController.tableView.delegate = self;

    self.searchController = [[UISearchController alloc] initWithSearchResultsController:self.resultsController];
    [self.searchController setSearchResultsUpdater:self];
    [self.searchController setDelegate:self];

    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.1")) 
        self.searchController.obscuresBackgroundDuringPresentation = NO;
    

    self.extendedLayoutIncludesOpaqueBars = YES;

    self.navigationItem.searchController = self.searchController;

    self.searchController.searchBar.delegate = self;

    self.definesPresentationContext = true;
    self.searchController.hidesNavigationBarDuringPresentation = false;

    self.searchController.searchBar.showsScopeBar = NO;
    self.searchController.searchBar.scopeButtonTitles = @[@"One", @"two", @"three"];

我想在点击UISearchBar栏时添加Scopebar,并在退出UISearchBar时隐藏它,所以我使用以下代码:

- (void)willPresentSearchController:(UISearchController *)searchController 
    self.searchController.searchBar.showsScopeBar = YES;
    [self.searchController.searchBar sizeToFit];


- (void)willDismissSearchController:(UISearchController *)searchController 
    self.searchController.searchBar.showsScopeBar = NO;
    [self.searchController.searchBar sizeToFit];

问题是当我关闭UISearchBar(通过单击取消按钮)时,我仍然可以看到范围空白。

之前(点击搜索栏时):

之后(点击搜索栏后取消btn):

知道如何解决这个问题吗?

【问题讨论】:

你能解释更多你真正想做的事情吗?你想在取消按钮上隐藏搜索栏,或者你想隐藏搜索栏图像。 @VipinPareek 我想隐藏搜索栏范围栏 创建一个搜索栏的出口,然后当你点击取消按钮时,隐藏搜索栏的代码就像 yoursearchbar_object_name.ishidden = true 一样,当你想再次显示搜索栏时你写类似 yoursearchbar_object_name.ishidden = false 的代码 @VipinPareek 搜索栏范围被隐藏,但留下一个空白空间 然后在隐藏搜索栏时添加搜索栏高度约束的出口,然后您将编写一行代码,也类似于 search_bar_height_constraints_object_name.constant = 0 // 这一行写在您隐藏搜索栏时你显示搜索栏,然后写 search_bar_height_constraints_object_name.constant = 你的实际搜索栏高度,比如 40。你的空间就消失了。谢谢 【参考方案1】:

当我们为 ios 13 添加范围栏按钮时,这是适用于我的与 SearchBar 高度相关的解决方案。

    实现 - UISearchControllerDelegate 或 UISearchBar 委托并分配如下。

    searchController.delegate = self; searchController.SearchBar.delegate = self;

    重写 UISearchControllerDelegate 或重写 UISearchBarDelegate 方法。

    -(void) didPresentSearchController:(UISearchController *)searchController [自我resizeTableViewHeaderHeight]; -(void) didDismissSearchController:(UISearchController *)searchController [自我resizeTableViewHeaderHeight];

    -(void) searchBarCancelButtonClicked:(UISearchBar *)searchBar [自我resizeTableViewHeaderHeight];

    根据搜索栏高度调整 TableView 标题高度 -

    -(void)resizeTableViewHeaderHeight

     UIView *headerView = self.table_view.tableHeaderView;
     CGRect frame = headerView.frame;
     frame.size.height = 56; //Make Constant and assign value to it.
     headerView.frame = frame;
     self.table_view.tableHeaderView = headerView;
    

【讨论】:

以上是关于UISearchBar 范围空白的主要内容,如果未能解决你的问题,请参考以下文章

添加 UISearchBar 后 UITableView 底部的空白处

带有包含自定义单元格的 UITableView 的 UISearchBar => 空白单元格

如何将图像设置为 UISearchBar 的范围栏项目?

UISearchBar 的范围按钮覆盖了第一行结果

开始编辑后关闭 UISearchBar 中的范围栏

UISearchBar-更改范围而不使表格变灰?