とよく遊んでいない私は私の現在の設定がされている問題があります。2つのビューコントローラをスワップアウト用> AのViewController - - > UINavigationControllerUISearchController - 子ビューコントローラ
のUITableViewControllerを。
各子ビューコントローラには、それぞれに関連付けられたUISearchControllerがあります。 UISearchBarがアクティブになると、正しい位置に表示されることはありません。
extension MySearchViewController: UISearchControllerDelegate {
func willPresentSearchController(searchController: UISearchController) {
var adjustedOrigin = searchController.searchBar.frame.origin
//FIXME: There's some odd behavior with embedded child VCs where the status bar adjustments are not taken into consideration
adjustedOrigin.y += UIApplication.sharedApplication().statusBarFrame.height
searchController.searchBar.frame.origin = adjustedOrigin
definesPresentationContext = false
navigationController?.definesPresentationContext = true
navigationController?.extendedLayoutIncludesOpaqueBars = true
}
func didPresentSearchController(searchController: UISearchController) {
definesPresentationContext = true
}
func didDismissSearchController(searchController: UISearchController) {
var adjustedOrigin = searchController.searchBar.frame.origin
//FIXME: There's some odd behavior with embedded child VCs where the status bar adjustments are not taken into consideration
adjustedOrigin.y -= UIApplication.sharedApplication().statusBarFrame.height
searchController.searchBar.frame.origin = adjustedOrigin
}
}
あなたは私が手動でこれまで好まないことであるUISearchBarのオフセットを修正しようとしているとして、原点を調整することが、上記で見ることができます。私はストーリーボードの下に、そして階層内のほぼどこでもコードを使って、ディスプレイを(多くの領域で)チェックアウトしようとしました。私は相殺の原因を見つけることができません。デフォルトでは、UISearchBarのようなすべての方法ステータスバーの下に表示されます。
これはまだ少しオフになっている私の手動調整なしです。
誰にでも解決策がありますか?
編集1:親の中で何かがVCがめちゃくちゃにされていることを
さらなる証拠を提示するときUISearchBarの実際にスーパーが-20でオフセットされ、オフセット。したがって、次のように問題を修正します。
import UIKit
class MySearchController: UISearchController {
override func viewDidLoad() {
super.viewDidLoad()
edgesForExtendedLayout = .Top
extendedLayoutIncludesOpaqueBars = true
automaticallyAdjustsScrollViewInsets = true
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
print(active)
if active && searchBar.superview!.frame.origin != CGPoint.zero {
searchBar.superview?.frame.origin = CGPoint.zero
}
}
}
VCの子供の奇妙な制約があるかどうかチェックしましたか? – brkr
あなたはそれが何を意味するか分かりません。 UISearchControllerは、子VCの自動レイアウト制約とは別のものです。影響を受けるのはUISearchBar(プレゼンテーションモードでUISearchControllerに注入されたときにコンテナ内にある)だけです。 UISearchBarは、指定された制約に基づくレイアウトを使用しないようにマスク制約を適切に変換します。 – TheCodingArt
ほとんどの場合、これは間違いなく、私が知る限りでは、文脈上のオフセットを伝達しているもののために何かをチェーン上で伝達するものです。 – TheCodingArt