ios - UISearchBar 范围空白

标签 ios objective-c swift iphone uisearchbar

我有 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 (通过单击取消按钮)我仍然可以看到范围空白。

之前(单击搜索栏时):
enter image description here

之后(点击搜索栏后取消btn):
enter image description here

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

最佳答案

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

  • 实现 - UISearchControllerDelegate 或 UISearchBar Delegate 并分配如下。
    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;
    
    }
  • 关于ios - UISearchBar 范围空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61245207/

    相关文章:

    objective-c - 如何向 MacOS Finder 添加自定义列?

    xcode - 如何在 Swift 中创建 Sprite 在屏幕范围内的随机移动?

    iOS:隐藏 UIStackView subview

    swift - 如何从 arc4random 中排除特定整数

    ios - ProductName-Swift.h 不会在更改相应的 Objective-C 文件时更新

    ios - 当 iOS 7 上的 selectedIndex 值改变时 TabBar 消失

    ios - 通过导航 Controller ios 按下后退按钮时刷新主页

    iphone - 如何显示包含超链接的 PDF 文档? (在 iOS 上)

    ios - View 转换

    objective-c - 生成固定时间的 NSDate