ios UITableView Header中的UISearchBar范围按钮隐藏表视图的第一行

1wnzp6jl  于 2023-02-01  发布在  iOS
关注(0)|答案(6)|浏览(139)

我有个问题:我有一个UIView,它包含一个UISearchBar作为UITableView的头,问题是每当我点击UISearchBar时,动画范围按钮出来隐藏了表格第一行的一部分。我看了很多类似的问题,但没有一个答案起作用。有没有办法给headerView添加一个底部约束,以便当UISearchBar被聚焦和编辑时,UITableView下降到范围按钮视图的高度?
这是我添加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

如果你可以请让我知道我如何才能修复这个错误,我将非常感激!
谢谢!

to94eoyn

to94eoyn1#

这是因为HeaderView的高度设置为搜索栏的高度,最初为44。但一旦您单击搜索栏,搜索栏将以模态显示,并与范围按钮沿着移到顶部,但基本的HeaderView高度仍然相同,为44而不是88(搜索栏高度+范围按钮高度)
我的处理方式是-
1)实现-UISearchControllerDelegate并使用searchController.delegate = self;赋值
2)覆盖UIsearchControllerDelegate方法-

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

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

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;
}
idfiyjo8

idfiyjo82#

设置

searchController.hidesNavigationBarDuringPresentation = false
definesPresentationContext = false

这对我很有效

uqdfh47h

uqdfh47h3#

在我的例子中,设置范围按钮标题就足以显示范围栏,但是搜索控件/tableview没有正确初始化,也没有显示所有行,直到我插入

searchController.searchBar.showsScopeBar = true
gajydyqb

gajydyqb4#

searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
definesPresentationContext = false
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

只需将definesPresentationContext设置为false即可

ymdaylpp

ymdaylpp5#

我也遇到过同样的问题,这是由UITableView对顶部布局向导的约束引起的(导航栏)。导航栏向上滑动,显示搜索栏和/或范围按钮,并拉动表格顶部。打破这种限制,您会发现搜索栏和范围按钮向上移动,但是表的第一行的顶部保持不变,现在你只需要弄清楚如何约束表,使它在所有设备上都有一个合适的高度。

ahy6op9u

ahy6op9u6#

当我遇到这种情况时,我只能得出这样的结论:这是一个bug。修复它的唯一方法是以一种非常具体的方式设置布局:
1.确保tableview被放置在所有其他视图的后面,也就是在视图控制器的根视图中视图列表的顶部,如脚本文件的文档大纲所示。

1.确保在表格视图的顶部和视图控制器根视图的顶部边距之间存在垂直距离约束。完全按照屏幕截图中的方式进行设置。如果两个视图的顺序相反,则它将不起作用。如果约束是针对超级视图顶部而不是超级视图顶部边距,则它将不起作用。如果约束是针对顶部布局参考线,那就行不通了。

我从来没有经历过这样的事情,在所有的时间,我一直在工作,这是纯粹的运气,我有一个工作项目进行比较,并最终找出如何得到它的权利。

相关问题