2

私のiPadアプリにはUITableViewがあります。テーブルのフレーム サイズは画面サイズよりも小さいため、検索機能の見栄えを良くするには、searchResultTableView のフレームを TableView に合わせて調整する必要があります。UISearchDisplayDelegate の -searchDisplayController:willShowSearchResultsTableView: メソッドで実行しています。

調光表示以外はすべて正常に動作します。検索を開始すると、ビューの幅は画面の幅と等しくなります。

ビューを暗くすると画面全体が表示されます

検索文字列の入力を開始するか、テキスト フィールドをクリアすると、searchResultsTableView のサイズが適切に変更され、すべてが正常に機能します。

検索結果のテーブルビューは適切にサイズ変更されます

調光ビューもサイズ変更されます

この行を使用して -searchDisplayControllerWillBeginSearch: メソッド内の searchResultsTableView フレームを変更しようとしました

controller.searchResultsTableView.frame = myFrame;

しかし、うまくいきません。独自の検索表示コントローラーを実装する以外に何か提案はありますか?

4

1 に答える 1

1

調光ビューのフレームも変更する必要がありましたが、理由は異なります。私の場合、UITableViewControllerではなく通常のUIViewControllerでプログラムでUISearchDisplayControllerとUISearchBarを作成しました。また、MFSideMenuを使用していたため、問題が複雑になりました。最終的に発生したのは、調光ビューが最初は正しい位置にあったことですが、次に検索がクリアされたときに、調光ビューがそのサイズのちょうど半分だけ左および上にシフトしました。UISearchDisplayControllerを指定すると、そのような調光ビューを見つけることができます。

for(UIView * v in controller.searchContentsController.view.subviews)
{
    if([v isMemberOfClass:[UIControl class]])
    {
        v.frame = newFrame; //This frame should account for the UISearchBar
    }
}

最初の誤ったフレームを処理するには、次のデリゲートメソッドでフレームを変更する必要があります。

- (void) searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView;

後続のクリアで誤ったフレームを処理するには、次のデリゲートメソッドでフレームを変更する必要があります。

- (void) searchDisplayController:(UISearchDisplayController *)controller didHideSearchResultsTableView:(UITableView *)tableView;

注:このソリューションは、searchContentsControllerのサブビューを介して実行されます。これは、isKindOfClassではなくisMemberOfClassを使用した理由の1つです(UIButtonはUIControlのサブクラスです)。UIControlインスタンスをビューに追加した場合は、さらに区別する必要があります(タグを使用して、どのインスタンスが自分のものであるかを判別するのに役立てることができます)。

于 2012-10-11T04:22:10.493 に答える