【问题标题】:UINavigationBar disappears with UISearchDisplayController and UISearchBarUINavigationBar 与 UISearchDisplayController 和 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];
}

【问题讨论】:

    标签: ios uinavigationcontroller uinavigationbar uisearchbar uisearchdisplaycontroller


    【解决方案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。这似乎是正确解决此问题的唯一方法。

    【讨论】:

      猜你喜欢
      • 2011-04-09
      • 2014-01-22
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      • 2013-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多