我有UISearchController
UITableViewController
作为searchResultsController
,此UISearchBar
的{{1}}设置为searchController
在我的根ViewController中显示的当前tableHeaderView
。正如预期的那样,几乎所有东西都运作良好。但是在tableView
的动画中(当我点击searchBar和UISearchBar
隐藏并且searchBar到达顶部时,就像在UINavigationBar
中一样)我有一个奇怪的行为。它不会移动到UISearchDisplayController
(y:0)的位置,而是跳出屏幕而不是启动显示取消按钮的动画。我尝试将我的实例化代码移动到UINavigationBar
而不是viewDidLoad
,事情就是一样的。我认为问题的中心位于init
视图的框架中,但我不确定(我尝试设置框架,但没有成功)。我正在做的一切都是纯粹的代码。
以下是代码的相关部分:
searchResultsController
我对- (void) viewDidLoad {
[super viewDidLoad];
// search controller setup
self.searchController = [[UISearchController alloc] initWithSearchResultsController:self.searchResultsController];
self.searchController.delegate = self;
self.searchController.searchResultsUpdater = self;
self.searchController.searchBar.delegate = self;
[self.searchController.searchBar sizeToFit];
self.tableView.tableHeaderView = self.searchController.searchBar;
self.searchController.definesPresentationContext = YES;
}
:
searchResultsController
我已经从apple下载了示例代码,但他们使用storyBoards和xib作为UITableViewCell,SearchController在项目中完美运行。有没有人有同样的问题?我怎样才能解决这个问题?任何解决方案或建议将不胜感激。
感谢您的关注。
答案 0 :(得分:23)
添加
self.extendedLayoutIncludesOpaqueBars = YES;
on viewDidLoad
方法
答案 1 :(得分:20)
您是否尝试将hidesNavigationBarDuringPresentation设置为false? 解决了我的头痛..
self.searchController.hidesNavigationBarDuringPresentation = false;
在我看来,将搜索栏放在导航栏中可以提供更加可靠的用户体验(适用于iphone)
self.navigationItem.titleView = self.searchController.searchBar;
答案 2 :(得分:17)
为了让这个更清楚@ Lorenzo的回答对我有用。
self.definesPresentationContext = YES;
答案 3 :(得分:7)
试试这个:
首先,您需要委派
UISearchControllerDelegate
对于Swift
func willPresentSearchController(searchController: UISearchController) {
self.navigationController?.navigationBar.translucent = true
}
func willDismissSearchController(searchController: UISearchController) {
self.navigationController?.navigationBar.translucent = false
}
答案 4 :(得分:3)
在Swift中,尝试:
override func viewDidLoad() {
edgesForExtendedLayout = []
searchController.hidesNavigationBarDuringPresentation = false
// ...
}
答案 5 :(得分:1)
SWIFT 3.01
func willPresentSearchController(searchController: UISearchController){
self.navigationController?.navigationBar.isTranslucent = true
}
func willDismissSearchController(searchController: UISearchController) {
self.navigationController?.navigationBar.isTranslucent = false
}
答案 6 :(得分:0)
我注意到UISearchController在我的一个视图中完美运行,但在另一个视图中没有。问题出在UITableViewController而不是UIViewController上。如果切换到UITiewController,其中包含UITableView并且正确约束,则没有问题。我用XIB实现了它,它运行得很好。
答案 7 :(得分:0)
在我的情况下,searchBar位于tableHeaderView中,屏幕上没有NavigationBar。但是,当活跃时,SearchBar仍然向上动画重叠状态栏。防止这种情况的解决方案是设置:
searchController.hidesNavigationBarDuringPresentation = false
这很奇怪,因为我说视图控制器没有使用导航栏。