質問

ナビゲーションバーの左端から右端に自分自身を配置する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の検索ではナビゲーションバーに検索バーがあり、端まで表示されるため、この外観が可能です。スライドバーのキャンセルボタンアニメーションが適切に機能するように、検索バーを端まで移動する方法を知っている人はいますか?

役に立ちましたか?

解決 3

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

Tab Bar Controller->ナビゲーションコントローラー->ビューコントローラ

問題の検索バーはView Controllerにあり、View ControllerはNavigation Controllerにあり、Navigation ControllerはTabバーにあります。

私は何気なくスタンフォードCS 193P(2009年春)のコースを見ていましたが、講義13の終わりに答えが提示されたかもしれません。 Alan Cannistraroは、Presenceアプリの構造は次の構造を持つ必要があると述べました。

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

(Tab Bar Controllerに隣接する)下部のView Controllerは、検索バーを制御するView Controllerでした。彼は、それがこの方法で行われなければ、「問題にぶつかるだろう」と警告しました。おそらく私が直面した問題?そう信じています。

他のヒント

実際には、本当に簡単な解決策があります。しなければならないことは、バックアイテムの幅がゼロのビューを作成することだけです。

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での作業は機能します(もちろん、1回だけ実行されるようにチェックして)。いくつかの初期化が既に完了した後にtitleViewを設定することだと思います。

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

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

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

UISearchBarをUINavigationBarの場所に表示するには、ルートビューコントローラに、ナビゲーションバーが通常ある場所に検索バーを置くだけです!

たぶん、リンゴはこれらのことをするためにUISearchDisplayControllerを使用しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top