我有一个UITableView
搜索栏以编程方式插入到表格中headerView
:
override func viewDidLoad() {
super.viewDidLoad()
resultSearchController = UISearchController(searchResultsController: nil)
resultSearchController.searchResultsUpdater = self
resultSearchController.dimsBackgroundDuringPresentation = false
resultSearchController.searchBar.delegate = self
resultSearchController.searchBar.placeholder = "Search Contacts"
resultSearchController.searchBar.scopeButtonTitles = ["All", "Title1", "Title2", "Title3"]
tableView.tableHeaderView = resultSearchController.searchBar
resultSearchController.searchBar.sizeToFit()
definesPresentationContext = true
tableView.tableFooterView = UIView(frame: CGRectZero)
}`
该表是按标准设置的UINavigationController
基于钻取 - 选择一行推送到详细视图控制器中。
纵向或横向时一切正常,但如果在显示时旋转细节视图,则在弹出详细视图后会崩溃。确切的顺序是:
- 纵向打开表格,使用搜索栏过滤结果,然后选择其中一个结果推送到详细视图中
- 在细节视图中,旋转至横向
- 仍在详细视图中时,旋转回纵向
当表视图重新出现时,搜索栏的所有单独元素都已“折叠”在彼此之上,并且整个元素覆盖了状态栏:
我尝试过各种显式设置搜索栏框架的方法viewDidAppear
,以及从标题视图中删除和替换它 - 但问题仍然存在。
我还注意到 Apple 示例代码也存在类似问题https://developer.apple.com/library/prerelease/ios/samplecode/TableSearch_UISearchController/Introduction/Intro.html :
有人为此想出了解决方法吗?
编辑添加:
进一步挖掘,问题似乎是导航栏在旋转后消失 - 这是之前的:
之后:
那么,有什么想法吗?
注意到不活动后searchBar
似乎没有这个问题,我已经成功地在视图消失时保存搜索栏状态并在视图重新出现之前恢复它。
示例代码经过以下更改后可以正常工作。保存状态:
- (void)viewDidDisappear:(BOOL)animated
{
if (self.searchController.active && self.searchController.searchBar.text.length > 0) {
self.savedSearch = self.searchController.searchBar.text;
[self disableSearch];
} else if (self.searchController.active) {
// empty search field - this won't get restored
[self disableSearch];
}
[super viewDidDisappear:animated];
}
- (void)disableSearch
{
if (self.searchController.isActive) {
self.searchController.searchBar.text = @"";
self.searchController.active = NO;
}
}
并恢复:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
if (self.savedSearch) {
NSLog(@"RESTORED SEARCH");
self.searchController.searchBar.text = self.savedSearch;
self.searchController.searchBar.showsCancelButton = YES;
self.searchController.active = YES;
self.savedSearch = nil;
}
}
这似乎工作正常,无论是否self.searchController.hidesNavigationBarDuringPresentation
已设置(尽管如果true
返回视图时有一些动画)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)