2

UISearchBar をナビゲーション バーの左端から右端に配置できないようです。-(void)viewDidLoad メソッドには、次のコードがあります。

UISearchBar *sb = [[UISearchBar alloc] initWithFrame:self.tableView.tableHeaderView.frame];
sb.delegate = self;
self.navigationItem.titleView = sb;
[sb sizeToFit];
[sb release];

ビルドして実行すると、一見問題ないように見えます。ただし、よく見ると、左側に余白/スペースがあることがわかります。これは大まかな計画では大したことではありませんが、検索バーをタップして検索を開始すると、キャンセル ボタンがアニメーション表示されます。検索バーが少し右に配置されているため、アニメーションがぎくしゃくし、キャンセル ボタンがリンク テキストのように端から外れ ます。

UINavigationItem は、最初と最後に削除できないパディングがある 3 つのセルを持つテーブルのように見えます。また、すべてを「マージ」して配置する方法もないようです。そこの検索バー。AppStore の検索では、ナビゲーション バーに検索バーがあり、隅々まで検索できるため、この外観が可能であることはわかっています。スライドインのキャンセル ボタンのアニメーションが正しく機能するように、検索バーを端まで移動する方法を知っている人はいますか?

4

4 に答える 4

5

実は、とても簡単な解決策があります。バック アイテムの幅がゼロのビューを作成するだけです。

UIView *hackView = [[UIView alloc] initWithFrame:CGRectZero];
UIBarButtonItem *hackItem = [[UIBarButtonItem alloc] initWithCustomView:hackView];      
self.navigationItem.backBarButtonItem = hackItem;
[hackView release];
[hackItem release];

UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectZero];
[searchBar sizeToFit];
self.navigationItem.titleView = searchBar;
[searchBar release];

init ではなく、必ず loadView メソッドでこれを行ってください。なぜそれが違いを生むのかわかりませんが、そうです。

どうやらタイミングの問題らしい。それをloadViewに入れるとうまくいきませんでしたが、viewWillAppearに入れるとうまくいきます(もちろん、一度だけ行われるようにチェックしてください)。アイデアは、初期化がすでに完了した後に titleView を設定することだと思います。

于 2010-03-08T18:05:03.517 に答える
2

次のコードは、この UIViewController だけのために navigationBar を非表示にします。

- (void)viewWillAppear:(BOOL)animated
{
    [self.navigationController setNavigationBarHidden:YES animated:animated];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [self.navigationController setNavigationBarHidden:NO animated:animated];
}

したがって、UISearchBar を UINavigationBar の場所に表示するには、ルート ビュー コントローラーで、ナビゲーション バーが通常ある場所に検索バーを配置します。

于 2010-05-15T02:07:30.143 に答える
1

私は答えを見つけたと思います-検証するためにテストしていませんが。上記の問題では、次の構造があります。

タブ バー コントローラー -> ナビゲーション コントローラー -> ビュー コントローラー

問題の検索バーはView Controllerにあり、それはNavigation Controllerにあり、Navigation Controllerはタブバーにあります。

Stanford CS 193P (Spring 2009) の講義を何気なく見ていたのですが、講義 13 の最後に答えが出ているかもしれません。Alan Cannistraro は、Presence アプリの構造は次の構造にする必要があると述べています。

この構造 http://img143.imageshack.us/img143/6/viewcontrollerstructure.jpg

一番下のView Controller(タブバーコントローラーに隣接)は、検索バーコントロールを持つView Controllerでした。彼は、この方法で行わないと「問題が発生する」と警告しました。おそらく私が直面した問題ですか?そう信じる。

于 2010-03-16T17:06:29.710 に答える
0

たぶん、アップルはこれらのちょっとしたことをするために UISearchDisplayController を使用しています。

于 2009-10-23T17:08:36.767 に答える