2017-09-22 6 views
12

herehereです。最初のリンクでは答えはありません。 2番目のリンクでは、答えは受け入れられませんが、リンゴ開発者フォーラムへのリンクはエラーです。 IOSの11前UISearchBarController iOS 11の問題 - 検索バーとスコープボタンが重複しています

enter image description here

IOSの11:

enter image description here

:同じデバイス同じコード。
また、この機能を使用するすべてのアプリを再公開する必要がありますか?

+0

https://stackoverflow.com/questions/31424540/uisearchcontroller-searchbar-and-scopebar-overlap-on-first-touch-event –

+0

@ Anbu.KarthikこのリンクはNitish –

+0

によって付着されると自己とのみこれを見ます.definesPresentationContext = true あなたのviewDIdloadにこの行を書いてください。 – Govaadiyo

答えて

1

Ray Wenderlichが提出したレーダーでは、@benckはWWDCからanswerを投稿しました。私が間違っていないとまだ投稿されていません。

1

あなたのご意見にお答えいただくと、UISearchControllerUISearchBarUITableViewtableHeaderViewに割り当てられました。 iOS 11では、代わりにUISearchControllersearchControllerのビューのnavigationItemのプロパティに割り当てる必要があります。どこにでもUISearchBarを割り当てる必要はありません。この新しいプロパティのApple's documentationを参照してください。

1

アプリで同じ問題が発生しましたが、解決策はiOS 11です。appleを使用すると、navigationItemにあるsearchBarの新しい方法が提案されました。以下のようなのviewDidLoadでの私のコード():searchViewとsearchViewHeight:

@IBOutlet var searchView: UIView! 
@IBOutlet var searchViewHeight: NSLayoutConstraint! // new added for iOS 11 

iOSの11の前に、以下のように私のViewControllerの階層:

My searchView before iOS 11

if #available(iOS 11.0, *) { 
    navigationController?.navigationBar.prefersLargeTitles = false 
    navigationItem.searchController = searchController 
    navigationItem.hidesSearchBarWhenScrolling = false 
    searchViewHeight.constant = 0 
} else { 
    searchView.addSubview(searchController.searchBar) 
} 

私は2つのIBOutletsを持っています

searchControllerのsearchBarビューが含まれている高さが44のsearchViewがあります。ナビゲーションバーの下にあります。

iOS 11では、searchViewの高さ制約に新しいIBOutletを追加し、定数を0に設定してこのコンテナビューを非表示にします。ナビゲーション項目の一部としてsearchControllerを追加します。

を参照してくださいリンゴのドキュメント: https://developer.apple.com/documentation/uikit/uinavigationitem/2897305-searchcontroller

もう一つは、iOSの11の下では、検索バーのテキストフィールドの背景色は、デフォルトでは、ナビゲーションバーの色より少し暗いです。一貫性を保つために、あなたは白に変更することができ、以下のコードは、iOS11との両方を動作しますその前に:これらの行を追加する

if let textField = searchController.searchBar.value(forKey: "searchField") as? UITextField { 
    if let backgroundView = textField.subviews.first { 

     // Search bar textField background color 
     backgroundView.backgroundColor = UIColor.white 

     // Search bar textField rounded corner 
     backgroundView.layer.cornerRadius = 10 
     backgroundView.clipsToBounds = true 
    } 
} 
3

は私のためにそれを修正:

override func viewDidLayoutSubviews() { 
    self.searchController.searchBar.sizeToFit() 
} 
+0

私のためにも修正されました。私はSearchControllerをtableViewに追加しましたが、iOS 11を条件的にチェックする必要はありませんでした。iOS 11 SDKとリンクする必要がありますが、iOS 10 SDKとリンクするとこのメソッドは動作しません。 – Raunak

0

が、私は最初の外観を得ることができます(グレッグの答えあたりなど)、次のコードを使用してiOS11で正しく表示するには:アプリがバックグラウンドにした場合、検索バーがアクティブであった

[self.searchController.searchBar sizeToFit]; 

if (@available(iOS 11.0, *)) { 
    self.navigationItem.searchController = self.searchController; 
    self.navigationItem.hidesSearchBarWhenScrolling = NO; 
} else { 
    // Fallback on earlier versions 
    self.tableView.tableHeaderView = self.searchController.searchBar; 
} 

しかし、その後、復元され、外観が終わるだろう上のNitishの第2スクリーンショットに示されているように重ね合わされる。

私は次の回避策でこれを修正することができました:

[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidBecomeActiveNotification object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) { 
    self.searchController.searchBar.showsScopeBar = NO; 
    [self.searchController.searchBar sizeToFit]; 
    self.searchController.searchBar.showsScopeBar = YES; 
    [self.searchController.searchBar sizeToFit]; 
}]; 

を(私はまだ検索バーがアクティブである間インタフェースの向きの変更を以下のレイアウトの問題を回避するにはどのように取り組んでいます - それはまだ終了。オーバーラップ)

0

まで私は解決策は、ナビゲーションバーに検索バーを追加することであると思う:

navigationController?.navigationBar.prefersLargeTitles = true // Navigation bar large titles 
navigationItem.title = "Contacts" 
navigationController?.navigationBar.largeTitleTextAttributes = [NSAttributedStringKey.foregroundColor : UIColor.white] 
navigationController?.navigationBar.barTintColor = UIColor(displayP3Red: 0/255, green: 150/255, blue: 136/255, alpha: 1.0) 

let searchController = UISearchController(searchResultsController: nil) // Search Controller 
navigationItem.hidesSearchBarWhenScrolling = false 
navigationItem.searchController = searchController 

あなたはUISearchBaのための例を見つけることができますrController - SearchBarとスコープボタンは、hereをオーバーラップします。

関連する問題