UITableView标头中的UISearchBar范围按钮隐藏表格视图的第一行

Giu*_*ori 0 xcode uitableview uisearchbar ios swift

我有一个问题:我有一个UIView包含a UISearchBar作为标头UITableView。问题是,每当我点击时UISearchBar,动画的作用域按钮就会出来,从而隐藏了表格第一行的一部分。我看了很多类似的问题,但没有一个答案有效。有没有一种方法可以向底部添加约束,headerView以便UITableView每当UISearchBar焦点对准并被编辑时,范围按钮视图的高度就会下降?

这是我在其中添加代码的代码UISearchController

searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
definesPresentationContext = true
searchController.searchBar.scopeButtonTitles = ["Groups", "People"]
tableView.tableHeaderView = searchController.searchBar
searchController.searchBar.delegate = self
searchController.searchBar.sizeToFit()
searchController.searchBar.barTintColor = darkGreen
searchController.searchBar.tintColor = yellow
searchController.searchBar.backgroundColor = darkGreen
tableView.sectionHeaderHeight = UITableViewAutomaticDimension
Run Code Online (Sandbox Code Playgroud)

如果可以的话,请让我知道如何解决此错误,我将不胜感激!

谢谢!

Fen*_*nil 5

发生这种情况是因为HeaderView的高度设置为Searchbar的高度,该高度最初是44。但是,一旦单击搜索栏,搜索栏就会以模态显示,并与范围按钮一起移到顶部,但是底层的HeaderView高度仍然是44,而不是88(搜索栏高度+范围按钮的高度)

为此,我处理的是-

1)实施- UISearchControllerDelegate并使用searchController.delegate = self;

2)覆盖UISearchControllerDelegate方法-

-(void) didPresentSearchController:(UISearchController *)searchController {
    [self fnResizeTableViewHeaderHeight];
}

-(void) didDismissSearchController:(UISearchController *)searchController {
    [self fnResizeTableViewHeaderHeight];
}
Run Code Online (Sandbox Code Playgroud)

3)根据搜索栏的高度调整TableView标头的高度-

-(void) fnResizeTableViewHeaderHeight {
    CGFloat height = [searchController.searchBar systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;

    UIView *headerView = self.table_view.tableHeaderView;

    CGRect frame = headerView.frame;

    frame.size.height = height;
    headerView.frame = frame;

    self.table_view.tableHeaderView = headerView;
}
Run Code Online (Sandbox Code Playgroud)