7

Appleの例「TableSearch」を見たことがあります。スコープボタンに触れると、検索バーの下に表示されます。 http://developer.apple.com/iphone/library/samplecode/TableSearch/Introduction/Intro.html

しかし、自分で作成すると、最初は見栄えがしますが、タッチすると見苦しくなり、スコープボタンと検索バーが次のように同じ行に表示されます。http: //cl.ly/BN9

iPadの「TableSearch」の例のようにするにはどうすればよいですか?

私はIBですべてを行っており、コントローラーからプログラムで検索バーを変更しようとしました。

    - (void)viewDidLoad {

        [super viewDidLoad];
        self.tableView.rowHeight = 88.0f;
        self.tableView.contentOffset = CGPointMake(0, self.searchDisplayController.searchBar.frame.size.height);
self.searchDisplayController.searchResultsTableView.rowHeight = self.tableView.rowHeight;


    //BELOW DID NOT WORK:
    CGRect b = self.searchDisplayController.searchBar.bounds;
    self.searchDisplayController.searchBar.bounds = CGRectMake(b.origin.x, b.origin.y, b.size.width, self.tableView.rowHeight);
    b = self.searchDisplayController.searchBar.frame;
    self.searchDisplayController.searchBar.frame = CGRectMake(b.origin.x, b.origin.y, b.size.width, self.tableView.rowHeight);

    //BELOW WORKS PERFECT BUT IS A PRIVATE METHOD, HENCE I AM NOT SUPPOSED TO USE IT
    //[self.searchDisplayController.searchBar setCombinesLandscapeBars:NO];

     }

前もって感謝します。

4

4 に答える 4

10

私もこのバグに遭遇し、Apple に報告し、技術支援を要請しました。その様子をお伝えします。それまでの間、このバグの背景について簡単に説明します。

iPhone では、ランドスケープ モードで貴重な垂直画面領域を保持するために、UISearchDisplayController は UISearchBar を設定して、検索バーと検索フィールドを 1 つの水平レイアウトに結合します。これは、画面の水平方向のサイズが大きくなった (Landscape で 480 ポイント) ため、非常にうまく機能します。残念ながら、iPad ではうまく機能しません。ランドスケープ モードでは、垂直方向のスペースが十分にあるため、そもそも UI の変更は必要ありません。また、UISplitViewController のマスター ビューには、iPhone の 480 ピクセルの増加ではなく、まだ 320 ピクセルの水平方向の表示スペースしかありません。結果はiSoreです。

おそらく問題は、UISearchDisplayController がその willRotateToInterfaceOrientation:duration : メソッドでうまく動作していないことです。具体的には、UISearchBar で CombineLandscapeBars プロパティを設定する前に、iPhone 上にあるかどうかを確認する必要はありません。UISearchDisplayController の見落としを修正するため、コード内のプライベート API クラッジが機能します。しかしもちろん、Apple は文書化されていない API を使用することで古代人の怒りをあなたに浴びせます。本当に、これに関しては Apple に翻弄されています。

UISearchDisplayController の見栄えと利便性をあきらめる場合は、UISearchBar sans UISearchDisplayController を使用して、プレゼンテーションの側面を自分で管理できます。明らかに、これにはさらに多くのコードが必要であり、Apple の API エンジニアが仕事をしたとしても意味がありませんが、少なくとも表示のバグは解決されます。

あなたが Apple であれば、文書化されていない独自の API を使用できます。そのため、Mail.app にはこの問題はありません。

アップデート

私が Apple に提出したバグレポートは #8344719 です。

于 2010-08-24T01:11:40.607 に答える
1

次のコードを使用すると、警告は表示されません。

if ([self.searchDisplayController.searchBar respondsToSelector:@selector(setCombinesLandscapeBars:)])
{
    objc_msgSend(self.searchDisplayController.searchBar, @selector(setCombinesLandscapeBars:), NO );
}
于 2011-11-14T13:12:46.587 に答える
0

ここのフレームのように、searchBar の境界とフレームを設定すると、次のようになります。

blabla.searchBar.frame = CGRectMake(b.origin.x, 
                                    b.origin.y, 
                                    b.size.width, 
                                    self.tableView.rowHeight);

高さに問題があるようです。スコープ ボタンは検索バーの下にある程度のスペースを必要とするため、境界とフレームの両方の高さを大きくする必要があります。

イベントでスコープ ボタンを表示および非表示にする場合は、毎回フレーム サイズを調整する必要があります。

于 2010-08-24T01:23:52.417 に答える
0

iPad でこの問題が発生していますが、これを実装ファイルに挿入すると問題が発生する可能性があります。

@synthesize tableView;

XIB のロードに問題があると推測していますが、これで問題が解決する理由はわかりません。

于 2010-12-13T21:24:03.990 に答える