25

UITableViewInterface Builder で行の高さを 54.0 に設定しました。私はUISearchDisplayControllerその見解を持っています。ユーザーが検索バーをタップすると、テーブルのサイズが適切に変更されます。ただし、入力を開始すると (そして実際に検索を実行すると)、行の高さが減少します。検索がCancelをタップするまで、間違ったままです。

Apple のサイトでは、この動作に関するドキュメントは見つかりませんでした。

UISearchDisplayDelegateデリゲート呼び出しで行の高さを設定しようとしました。これは正しいアプローチかもしれませんが、詳細がわからず、機能させることができませんでした。

も実装してみました- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;。これは機能しましたが、このリストには何千ものエントリがあり、パフォーマンスに影響を与えることはできません。

これを修正する正しい方法は何ですか?

4

8 に答える 8

56

これを行う正しい方法は、次のデリゲートを使用することです。

- (void)searchDisplayController:(UISearchDisplayController *)controller didLoadSearchResultsTableView:(UITableView *)tableView
{
    tableView.rowHeight = 54.0f; // or some other height
}

UITableViewが作成または表示されるときに呼び出されます。

searchDisplayController.searchResultsTableView検索が実行されていないときに他のコードを呼び出すと、事前に UITableView が作成されます。をwillShowデリゲートメソッドで設定するrowHeightと、事前にtableViewを作成していると、なぜかrowHeightを変更するタイミングを逸してしまいます。

于 2012-02-02T09:16:21.487 に答える
16

見つけた!

テーブルがに格納されていると仮定しますtableView

- (void)viewDidLoad;
{
    [super viewDidLoad];
    self.searchDisplayController.searchResultsTableView.rowHeight = tableView.rowHeight;
}

他に何も必要ありません。

編集:より良い解決策については、netmikeyの回答を参照してください。

于 2010-04-14T18:39:03.020 に答える
10

スティーブ、あなたの解決策は私にはうまくいきませんでした: 最初は検索結果がうまく表示されましたが、ユーザーが [キャンセル] をクリックして (検索バーを閉じて)、再度開いて検索語を入力すると、高さはまた間違っているでしょう。

使用する DigDog のソリューションsearchDisplayController:didShowSearchResultsTableViewはちょっと機能していましたが、ユーザーは、検索が開始されたときにセルの高さが「ジャンプ」するのを見ました。

これらの問題の両方を修正した私が見つけた解決策は、次のものを使用しています。

- (void)searchDisplayController: (UISearchDisplayController *)controller 
 willShowSearchResultsTableView: (UITableView *)searchTableView {

    searchTableView.rowHeight = myTableView.rowHeight;
}

...でUISearchDisplayDelegate

よろしく、 ネットマイキー

于 2011-05-04T08:59:07.780 に答える
3

ビューでDidLoad:

検索表示コントローラーのデリゲートを自分自身に設定できます。

- (void)viewDidLoad 
{
    self.searchDisplayController.delegate = self;
}

次に、ビュー コントローラーにテーブル ビュー デリゲートを実装します。

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (tableview == self.searchDisplayController.tableView) {
        return 55;
    } else if (tableView == self.tableView) {
       return  44;
     }
}
于 2012-11-23T03:08:12.230 に答える
0

両方を設定する必要があります

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {    
    return 54.;
}

self.tableView.rowHeight = 54.;

UISearchDisplayDelegate でも

- (void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView {
    tableView.rowHeight = 54.; 
}

それ以外の場合、検索で「結果がありません」が発生した場合、セルの高さはデフォルトに戻ります。

于 2010-04-14T18:01:15.817 に答える
0

私はios 7.0とXcode 5.0を使用しています。この方法で行の高さを変更する必要があると思います:

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
    // Return the number of rows in the section.
    if (tableView == self.searchDisplayController.searchResultsTableView)
    {
        tableView.rowHeight = ...;// change your row height here!
        return [self.searchResults count];
    }
    else
    {
        ...
        return ...;
    }
    }

テーブルビューがレイアウトを表示しようとするたびにこのメソッドが呼び出されるため、検索バーに文字を入力するたびにこのメソッドが呼び出され、行の高さが変更されることはありません。

于 2014-01-14T12:51:09.483 に答える
-1

どの解決策も私にとってはうまくいきませんでした...

私自身のヒットと試行を行いました...そしてそれを機能させました...

通常のテーブルビューと検索テーブルビューで異なる行の高さが必要な場合...

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
// for normal results
     if (tableView==self.tableView) return 54;
// for search results
     else return 54; }

そして、あなたが共通の高さを望むなら...

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
     return 54; }

PS: 各行の行の高さが同じである場合、行の高さがセルごとに再計算されるため、この方法はリソースの使用効率があまり高くないことに注意してください...ほとんどの場合、これは目立ちませんが、私はまだより良い解決策を探しています!

于 2011-06-05T19:13:39.907 に答える