UINavigationBar 与 UISearchDisplayController 和 UISearchBar 一起消失
Posted
技术标签:
【中文标题】UINavigationBar 与 UISearchDisplayController 和 UISearchBar 一起消失【英文标题】:UINavigationBar disappears with UISearchDisplayController and UISearchBar 【发布时间】:2014-01-31 01:03:35 【问题描述】:这是发生了什么:
用户点击搜索,看到如下图:
然后用户开始输入一个术语,一旦发生,导航栏就会消失。您在此处看到的是附加了导航栏的空白区域。我已经尝试了一切,但无法弄清楚它为什么会这样做。并且没有 ViewController 不是 NavigationController 的根视图(没有 UINavigationController)。
这是我的搜索委托的相关代码:
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
if ([searchText length] == 0)
[self.aTableView reloadData];
return;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.title contains[cd] %@ OR SELF.summary contains[cd] %@", searchText, searchText];
mFilteredArray_ = [[self.parseResultsCanadaSection filteredArrayUsingPredicate:predicate] copy];
[self.aTableView reloadData];
#pragma mark - UISearchDisplayController delegate methods
-(BOOL)searchDisplayController:(UISearchDisplayController *)controller
shouldReloadTableForSearchString:(NSString *)searchString
[self filterContentForSearchText:searchString
scope:[[self.searchDisplayController.searchBar scopeButtonTitles]
objectAtIndex:[self.searchDisplayController.searchBar
selectedScopeButtonIndex]]];
return YES;
- (void)searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
mFilteredArray_ = nil;
[self.aTableView reloadData];
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
mFilteredArray_ = nil;
[self.aTableView reloadData];
【问题讨论】:
【参考方案1】:尝试将搜索栏的框架设置为在用户开始搜索时使屏幕动画化,这就是我解决此问题的方法。
-(void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller
if (isiosseven)
searching = YES;
[UIView animateWithDuration:0.25 animations:^
searchBar.frame = CGRectMake(searchBar.frame.origin.x, 20, searchBar.frame.size.width, searchBar.frame.size.height);
tableView.frame = CGRectMake(tableView.frame.origin.x, searchBar.frame.origin.y + searchBar.frame.size.height, self.view.frame.size.width, self.view.frame.size.height - 40);
];
-(void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller
if (isIOSseven)
searching = NO;
[UIView animateWithDuration:0.25 animations:^
searchBar.frame = CGRectMake(searchBar.frame.origin.x, 64, searchBar.frame.size.width, searchBar.frame.size.height);
tableView.frame = CGRectMake(0, searchBar.frame.origin.y + searchBar.frame.size.height, self.view.frame.size.width, self.view.frame.size.height - 64);
];
【讨论】:
您好,谢谢。但是,我尝试了与此类似的方法,最终发生的事情是 searchdisplayresults 表在搜索栏和 searchdisplayresults 表之间总是有差距。【参考方案2】:我解决这个问题的方法是添加一个 UINavigationController。这似乎是正确解决此问题的唯一方法。
【讨论】:
以上是关于UINavigationBar 与 UISearchDisplayController 和 UISearchBar 一起消失的主要内容,如果未能解决你的问题,请参考以下文章
在 UIStatusBar 上设置与 UINavigationBar 相同的背景颜色
UINavigationBar 自定义背景与悬垂(iOS 5)