菜鸟教程小白 发表于 2022-12-13 11:09:48

iOS 添加 UISearchController 正在取消隐藏 NavigationBar


                                            <p><p>当我使用 UISearchController 更新我的表格 View 时,我遇到了这种奇怪的副作用(如果我从表格 View 中选择某些内容而不搜索该错误不会自行显现)。但是当我搜索时,选择一个单元格,然后 <code>popViewControllerAnimated:</code> 由于某种原因 NavigationBar 不再隐藏。我想认为这是 iOS 中的错误,而不是特定于我的代码。但我想我会看看是否有人能在我的代码中发现一个错误,或者对我可能做错的事情有任何想法。我已将 <code>;</code> 添加到 <code>rootView</code> 的 <code>viewWillAppear</code> 中,但该栏直到动画结束了。</p>

<p>我的 TableView/UISearchController 代码:</p>

<pre><code>@interface LBSelectUniversityView()&lt;UISearchResultsUpdating, UISearchBarDelegate&gt;
@property (strong, nonatomic) UISearchController *searchController;
@end

@implementation LBSelectUniversityView {
    NSArray *schoolNames;
    NSArray *searchResults;
}


- (void)viewDidLoad {
    ;
    schoolNames = [ schoolNames];
    searchResults = schoolNames;
    self.searchController = [ initWithSearchResultsController:nil];
    self.searchController.searchResultsUpdater = self;
    self.searchController.dimsBackgroundDuringPresentation = NO;
    self.searchController.searchBar.delegate = self;
    self.tableView.tableHeaderView = self.searchController.searchBar;
    self.definesPresentationContext = YES;
    ;
}

#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return searchResults.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @&#34;Cell&#34;;
    UITableViewCell *cell = ;
    if (cell == nil) {
      cell = [ initWithStyle:UITableViewCellStyleDefault
                                    reuseIdentifier:CellIdentifier];
    }
    ...
    return cell;
}

- (void)filterContentForSearchText:(NSString*)searchText{
    if () return;

    NSPredicate *resultPredicate = [NSPredicate
                                    predicateWithFormat:@&#34;SELF contains %@&#34;,
                                    searchText];
    searchResults = ;
}

- (void)updateSearchResultsForSearchController:(UISearchController *)searchController{
    NSString *searchString = searchController.searchBar.text;
    ;
    ;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    ...
    ;
}

@end
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>如果您设置 <code>searchController.hidesNavigationBarDuringPresentation = NO</code>,问题会消失吗?</p>

<p>可能正在发生以下情况:</p>

<ol>
<li>当您开始搜索时,<code>searchController.active</code> 设置为 <code>YES</code>。因此 <code>searchController</code> 调用 <code>[... setNavigationBarHidden:YES]</code> 因为 <code>UISearchController.hidesNavigationBarDuringPresentation = YES</code> 默认情况下。</li>
<li><code>popViewControllerAnimated:</code> 被调用。</li>
<li><code>searchController.active</code> 设置为 <code>NO</code>,所以 <code>searchController</code> 调用 <code>[... setNavigationBarHidden:NO]</code> .这会导致显示导航栏。</li>
</ol></p>
                                   
                                                <p style="font-size: 20px;">关于iOS 添加 UISearchController 正在取消隐藏 NavigationBar,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/32803892/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/32803892/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iOS 添加 UISearchController 正在取消隐藏 NavigationBar