iOS - UISearchController处于活动状态时显示的导航栏

时间:2016-01-01 21:46:15

标签: ios objective-c uinavigationbar uisearchcontroller

我以编程方式创建了一个UISearchController并将其添加到我的UIView A.我在同一个UIView中也有一个UITableView。我使用UISearchController搜索我的UITableView。当您单击一个单元格时,UIView B会被推送。 UIView A和UIView B都将UINavigationBar设置为HIDDEN。 当我只是点击UITableViewCell而不进行搜索时,一切都完美无缺,UIView B显示没有UINavigationBar。

但是当我使用UISearchController进行搜索并单击UITableViewCell时,UIVavigationBar显示在UIView B上,即使我将其设置为隐藏在viewDidAppear方法中。

这是我的代码:

BarsSearchController = [[UISearchController alloc] initWithSearchResultsController:nil];
BarsSearchController.searchResultsUpdater = self;
BarsSearchController.dimsBackgroundDuringPresentation = NO;
BarsSearchController.searchBar.delegate = self;
BarsSearchController.searchBar.barTintColor = [UIColor whiteColor];
BarsSearchController.searchBar.searchBarStyle = UISearchBarStyleMinimal;
[searchBarView addSubview:BarsSearchController.searchBar];
[searchBarView addConstraint:[NSLayoutConstraint constraintWithItem:BarsSearchController.searchBar
                                                          attribute:NSLayoutAttributeTop
                                                          relatedBy:NSLayoutRelationEqual
                                                             toItem:searchBarView
                                                          attribute:NSLayoutAttributeTop
                                                         multiplier:1.0
                                                           constant:0.0]];

[searchBarView addConstraint:[NSLayoutConstraint constraintWithItem:BarsSearchController.searchBar
                                                          attribute:NSLayoutAttributeLeading
                                                          relatedBy:NSLayoutRelationEqual
                                                             toItem:searchBarView
                                                          attribute:NSLayoutAttributeLeading
                                                         multiplier:1.0
                                                           constant:0.0]];

[searchBarView addConstraint:[NSLayoutConstraint constraintWithItem:BarsSearchController.searchBar
                                                          attribute:NSLayoutAttributeBottom
                                                          relatedBy:NSLayoutRelationEqual
                                                             toItem:searchBarView
                                                          attribute:NSLayoutAttributeBottom
                                                         multiplier:1.0
                                                           constant:0.0]];

[searchBarView addConstraint:[NSLayoutConstraint constraintWithItem:BarsSearchController.searchBar
                                                          attribute:NSLayoutAttributeTrailing
                                                          relatedBy:NSLayoutRelationEqual
                                                             toItem:searchBarView
                                                          attribute:NSLayoutAttributeTrailing
                                                         multiplier:1.0
                                                           constant:0.0]];
[searchBarView layoutIfNeeded];
self.definesPresentationContext = YES;
[BarsSearchController.searchBar sizeToFit];

我在这里缺少什么?

2 个答案:

答案 0 :(得分:0)

BarsSearchController.hidesNavigationBarDuringPresentation = YES;

答案 1 :(得分:0)

我有同样的问题,要修复它,我在viewDidLoad中隐藏了按钮和背景:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.navigationItem.hidesBackButton = YES;
    [[[self navigationController] navigationBar] setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
    [[[self navigationController] navigationBar] setShadowImage:[UIImage new]];
    [[[self navigationController] navigationBar] setTranslucent:YES];
}

我在viewDidAppear中隐藏了navigationBar:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [[self navigationController] setNavigationBarHidden:YES];
}