hereとhereです。最初のリンクでは答えはありません。 2番目のリンクでは、答えは受け入れられませんが、リンゴ開発者フォーラムへのリンクはエラーです。 IOSの11前UISearchBarController iOS 11の問題 - 検索バーとスコープボタンが重複しています
:
IOSの11:
注:同じデバイス同じコード。
また、この機能を使用するすべてのアプリを再公開する必要がありますか?
hereとhereです。最初のリンクでは答えはありません。 2番目のリンクでは、答えは受け入れられませんが、リンゴ開発者フォーラムへのリンクはエラーです。 IOSの11前UISearchBarController iOS 11の問題 - 検索バーとスコープボタンが重複しています
:
IOSの11:
注:同じデバイス同じコード。
また、この機能を使用するすべてのアプリを再公開する必要がありますか?
Ray Wenderlichが提出したレーダーでは、@benckはWWDCからanswerを投稿しました。私が間違っていないとまだ投稿されていません。
あなたのご意見にお答えいただくと、UISearchController
のUISearchBar
がUITableView
のtableHeaderView
に割り当てられました。 iOS 11では、代わりにUISearchController
をsearchController
のビューのnavigationItem
のプロパティに割り当てる必要があります。どこにでもUISearchBar
を割り当てる必要はありません。この新しいプロパティのApple's documentationを参照してください。
アプリで同じ問題が発生しましたが、解決策はiOS 11です。appleを使用すると、navigationItemにあるsearchBarの新しい方法が提案されました。以下のようなのviewDidLoadでの私のコード():searchViewとsearchViewHeight:
@IBOutlet var searchView: UIView!
@IBOutlet var searchViewHeight: NSLayoutConstraint! // new added for iOS 11
iOSの11の前に、以下のように私のViewControllerの階層:
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
}
}
は私のためにそれを修正:
override func viewDidLayoutSubviews() {
self.searchController.searchBar.sizeToFit()
}
私のためにも修正されました。私はSearchControllerをtableViewに追加しましたが、iOS 11を条件的にチェックする必要はありませんでした。iOS 11 SDKとリンクする必要がありますが、iOS 10 SDKとリンクするとこのメソッドは動作しません。 – Raunak
が、私は最初の外観を得ることができます(グレッグの答えあたりなど)、次のコードを使用して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];
}];
を(私はまだ検索バーがアクティブである間インタフェースの向きの変更を以下のレイアウトの問題を回避するにはどのように取り組んでいます - それはまだ終了。オーバーラップ)
まで私は解決策は、ナビゲーションバーに検索バーを追加することであると思う:
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をオーバーラップします。
https://stackoverflow.com/questions/31424540/uisearchcontroller-searchbar-and-scopebar-overlap-on-first-touch-event –
@ Anbu.KarthikこのリンクはNitish –
によって付着されると自己とのみこれを見ます.definesPresentationContext = true あなたのviewDIdloadにこの行を書いてください。 – Govaadiyo