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 一起消失的主要内容,如果未能解决你的问题,请参考以下文章

iOS7:UINavigationBar 与状态栏合并

UINavigationbar 提示与屏幕内容重叠

在 UIStatusBar 上设置与 UINavigationBar 相同的背景颜色

UINavigationBar 自定义背景与悬垂(iOS 5)

UIScrollView 与 UINavigationBar 的动态大小

UINavigationBar 自定义颜色与在情节提要中嵌入 UInavigationController