通常のテキスト フィールドを使用して、navigationBar の titleView を変更したいと考えています。次に、textField のサイズを設定して、古い「通常の」titleView を埋めたいと思います。
ストーリーボードでこれを行うことができないようです。ナビゲーション タイトル ビューがある場所にテキスト フィールドをドラッグしても機能しません。
だから私はでものを追加しました
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
PO(self.navigationItem.titleView);
CGRect theFrame= self.navigationItem.titleView.frame;
self.navigationItem.titleView=self.searchBar;
//self.searchBar.frame = theFrame;
while (false);
...
キャッシュされたもので動作しています。その PO は、オブジェクトのコンテンツを出力するマクロです。viewDidAppear で、self.navigationItem.titleView が null であることが判明しました。
そのため、searchBar を表示することはできますが、スペースがわからないため、searchBar をスペースに「埋める」ことはできません。
将来変更される可能性があるため、ハードコーディングは避けたいと思います。
それで、私は何をすべきですか?
self.navigationItem.titleView を設定するのではなく、単純にサブビューを追加するコードを見たことがあります。このアプローチの問題は、viewDidAppear、self.navigationItem.titleView でも 0 です。
これらのコードを追加しました:
CGRect theFrame= self.navigationItem.titleView.frame;
CGRect theFrame2 = self.searchBar.frame;
CGRect theFrame3 = self.navigationController.navigationItem.titleView.frame;
そして、構造体の値をnslogする方法がわかりませんが、theFrameとtheFrame3はすべて0です