2017-09-11 7 views
3

我々は、指定された特定のUIViewControllerUISearchControllerUISearchController.hidesNavigationBarDuringPresentationは、私たちのプロジェクトで

hidesNavigationBarDuringPresentation = false 

。 searchControllerにはスコープタイトルの配列があります。これまでのところ、iOS 10までうまく動作しますが、iOS 11のベータ版では、hidesNavigationBarDuringPresentationのfalse設定が無視され、表示が乱れるように見えます。プロジェクトの他の要因が原因ではないことを確認するため、私はUITableViewControllerという単一のベアボーンテストプロジェクトを作成しました。UISearchControllerはもう一つの単純なUITableViewControllerで初期化されています。 scopeButtonTitlesを割り当てる最後の行が存在しない場合

self.title = "Search Bar Scope Test" 
    let searchViewController = SearchViewController(style: .plain) 
    searchController = UISearchController(searchResultsController: searchViewController) 
    searchController!.searchBar.sizeToFit() 
    tableView.tableHeaderView = searchController!.searchBar 
    searchController?.hidesNavigationBarDuringPresentation = false 

    searchController?.searchBar.scopeButtonTitles = ["scope 1", "scope 2", "scope 3", "scope 4", "scope 5"] 

は、ナビゲーションバーを非表示に取得していないと検索バーは元の位置のままで次のコードは、メインビューコントローラ上のviewDidLoad()方法です。ただし、その行が存在する場合、NavigationBarは非表示になり、searchBarとスコープボタンはすべてiPhoneとiPadの両方でポートレートモードで上に移動しますが、スコープボタンが多く、フィットできない場合でもランドスケープモードで同じままです1行で)。

誰かがこれに遭遇しましたか?これはiOS 11でのバグか期待される動作(確かに私たちが望む動作ではありません)ですか?回避策はありますか?

ありがとうございます!私は別の関連問題を調査している間に

+0

スコープボタンに問題はありませんが、検索バー全体がテーブルビューから飛び出して画面の上部に付いています。 Xcode 9 GMの使用。 –

+0

@ChrisPaveglio私はついにこの問題の原因を発見しました。下の私の答えを見てください。 – CodePlumber

+0

ありがとうございますが、それは私の問題ではありません。私はそれがよりユニークだと思うより多くの時間をb/cそれを把握する必要があります。私は2つのテーブルビューを並べてiPadレイアウトを持っており、1つは検索バーを持っており、それは決してテーブルビューを残すべきではありません。私はもっ​​と先に進む前にいくつかのことをリファクタリングする必要があると思う。 –

答えて

3

OKは、searchBarとスコープボタンが誤整列iOSの11のキーがsearchControllerコンフィギュレーション手法は、iOSの11どこsearchBarに変更されたことであるのだという、問題の原因を発見しました

if #available(iOS 11.0, *) { 
    self.navigationItem.searchController = searchController 
    // optional, but apparently due to a bug in iOS 11, 
    // the searchBar and the scope buttons may get too high and mis-aligned 
    // when the nav bar is hidden 
    searchController?.hidesNavigationBarDuringPresentation = false 
} else { 
    tableView.tableHeaderView = searchController!.searchBar 
} 

上記のコードは、私は、IOSの11 UISearchBarに関連したいくつかのUIの問題を修正:もはや、以下に示すように代えて、全体searchControllerは、navigationItemの一部である必要があり、tableView'sheaderViewとして提示されるべきではありませんthis WWDC 2017 videoで実際にはお勧めですが、Xcode cou旧式のtableHeaderViewの代入線で私に警告してもらえれば、おそらくかなりの他の開発者の混乱と研究時間を節約できたでしょう。

関連する問題