0

私は最近、iOS アプリを書き直して、新しいUISearchControllerユニバーサル ストーリーボードを使用するようにしました。私のアプリは両方のデバイス ( iPhoneiPad ) で使用できるため、 を使用したユニバーサル ストーリーボードへの変更UISplitViewControllerは大きな利点でした。

しかし、悲しいことに、UISearchController期待どおりに機能していません。UISearchController次の行を追加しました。

self.searchController = UISearchController(searchResultsController: nil)
self.searchController.searchBar.sizeToFit()
self.searchController.dimsBackgroundDuringPresentation = false
self.myTableView.tableHeaderView = self.searchController.searchBar
self.searchController.searchResultsUpdater = self
self.definesPresentationContext = true

私のコントローラーチェーンは次のようなものです:

UISplitViewController
    UITabbarController (Master)
        UINavigationController
            UITableViewController
    UINavigationController (Detail)
        UINavigationController
            UIViewController

問題は、iPad アプリでUISearchBarは が で覆われていることUINavigationBarです。しかし、タブを切り替えてビューに戻ると。UISearchBarが見えます。したがって、どういうわけか、タブバーを切り替えた後、ビューが正しく再描画されます。iPhone版では自動で正しく動作します。

iPadアプリ

最初の打ち上げの後はUISearchBarUINavigationBar

最初の起動後、UISearchBar は UINavigationBar によってカバーされます

タブを切り替えた後、UISearchBar正しく表示されます

タブを切り替えた後、UISearchBar が正しく表示されます

iPhoneアプリ

タブを変更しなくても iPhone アプリは正常に動作しています。 iPhone アプリは期待どおりに動作します

私が試したこと:

  • extendsEdges の異なる設定の使用
  • 後で検索コントロールを追加することでだますことができると思ったので、viewWillAppear メソッドに SearchController を追加します。
4

1 に答える 1

0

self.searchController.searchBar.sizeToFit()viewDidload で検索コントローラーをセットアップすると仮定します。それに加えて、このメソッド (Objective-C コード) を追加する必要があります。

- (void)viewDidLayoutSubviews {
    // you could check
    // if (IS_IPAD || (IS_IPHONE_6PLUS && UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation))) 
    [self.searchController.searchBar sizeToFit];
}

うまくいかない場合は、これらのコードをviewDidlLoadまたはに追加できviewDidLayoutSubviewsます。

self.edgesForExtendedLayout = UIRectEdgeNone;
self.yourTableViewController.edgesForExtendedLayout = UIRectEdgeNone;

検索をドッキングしたい場合は、こちらの回答を参照してください

于 2014-12-11T06:34:02.787 に答える