我遇到了问题:我的UIView
包含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
如果你能告诉我怎样才能解决这个问题,我真的很感激!
谢谢!
答案 0 :(得分:4)
这是因为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];
}
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;
}
答案 1 :(得分:1)
设置
searchController.hidesNavigationBarDuringPresentation = false
definesPresentationContext = false
这对我有用
答案 2 :(得分:0)
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
将definePresentationContext设置为false
答案 3 :(得分:0)
我遇到了完全相同的问题。它是由UITableView对顶部布局指南(导航栏)的约束引起的。导航栏向上滑动以显示搜索栏和/或范围按钮,它会随之拉动桌面的顶部。打破这个约束,你会发现搜索栏和范围按钮向上移动,但是表格第一行的顶部保持不变。现在你必须弄清楚如何约束表格,以便它在所有设备上都有一个不错的高度....
答案 4 :(得分:0)
当我经历过这种情况时,归结为我只能得出结论是一个错误。解决这个问题的唯一方法是以非常具体的方式设置布局:
答案 5 :(得分:0)
对于iOS 11+,您应该查看此问题的答案https://stackoverflow.com/a/46436067/229688
基本上,这样做:
if #available(iOS 11.0, *) {
self.navigationItem.searchController = searchController
searchController?.hidesNavigationBarDuringPresentation = false
} else {
tableView.tableHeaderView = searchController!.searchBar
}
答案 6 :(得分:0)
就我而言,设置范围按钮标题足以使范围栏显示,但搜索控件/表视图未正确初始化,并显示所有行,直到我插入
searchController.searchBar.showsScopeBar = true