2017-11-27 12 views
0

UITableViewControllerUISearchControllerをプログラムで作成しました。正常に動作しますが、検索バーがステータスバーに正しく表示されません。ここに私のコードといくつかのスクリーンショットがあります。また、検索をキャンセルすると面白いアニメーションになります。検索コントローラの検索バーオーバーラップステータスバー

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    _resultsTableViewController = [ResultsTableViewController new]; 
    _searchController = [[UISearchController alloc] initWithSearchResultsController:_resultsTableViewController]; 
    _searchController.searchResultsUpdater = _resultsTableViewController; 
    _searchController.dimsBackgroundDuringPresentation = NO; 
    self.definesPresentationContext = YES; 
    self.tableView.tableHeaderView = _searchController.searchBar;  
} 

enter image description here

ステータスバーで、ここよりパディングがあるはずです。 enter image description here

検索をキャンセルすると、ステータスバーの高さが不正な動画が表示されます。 enter image description here

+1

WWDCからのこのビデオは、iOS 11の検索バーに対応する方法について説明しています。 https://developer.apple.com/videos/play/fall2017/201/ – mlecoz

答えて

4

あなたのスクリーンショットからは、iOS 11で作業しているようですが、このバージョンではUISearchController検索バーがUIに追加された方法が変更されています。 iOS 11では、検索を表示するナビゲーション項目があり、UIKitはテーブルヘッダービューに表示されている検索バーを正しく処理するように更新されていません。 iOSの上で

は≤10あなたは

self.tableView.tableHeaderView = _searchController.searchBar; 

を使用しますが、iOSの11以降に

self.navigationItem.searchController = _searchController; 
self.navigationItem.hidesSearchBarWhenScrolling = YES; 

への切り替えを継続する必要があります。

0

NavBar を非表示にしないことを指定しない限り、バージョン< iOS 11では検索バーがまだ表示されない場合があります。

if (@available(iOS 11.0, *)) { 
     self.navigationItem.searchController = self.mySearchController; 
     self.navigationItem.hidesSearchBarWhenScrolling = YES; 
    } else { 
     // Fallback on earlier versions 
     self.tableView.tableHeaderView = self.mySearchController.searchBar;  // show the SearchBar in TV header 
     self.mySearchController.hidesNavigationBarDuringPresentation = NO; 
    } 
関連する問題