5

iPhone アプリケーションを作成しており、ナビゲーション バーのタイトル ビューの位置にロゴを表示したいと考えています。UINavigationController のサブクラスを作成し、viewDidLoad に次の行を追加しました。

self.navigationBar.topItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"titlelogo.png"]];

(これは1行だけではもったいないと思われるかもしれませんが、私は複数の場所で使用しており、さまざまな理由で[UINavigationBarの外観]を使用したくありません)

これは、ナビゲーション コントローラーの直接の子に対しては正常に機能します。ロゴが表示されます。ただし、セグエを別のビューにプッシュすると、(私の知る限り)「同じ」ナビゲーションコントローラーの一部であっても、ロゴは引き継がれません。

(参考) -> MyNavigationController -> SomeViewController -> SomeOtherViewController

私はまた、 SomeOtherViewController の viewDidLoad に入ろうとしました:

 self.navigationController.navigationBar.topItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"titlelogo.png"]];

これでもロゴは表示されません。

いくつか突っ込んだ後、1​​)navigationController の viewDidLoad にその行がなく、2)SomeOtherViewController の viewDidLoad に 2 番目の行がある場合、次のことを発見しました。

開始: SomeViewController の表示。ロゴなし。クリックしてセグエをプッシュ: 消える前に、ロゴが SomeViewController のバーに表示されるようになりました。現在、ロゴのない SomeOtherViewController: を表示しています。クリックバック: SomeViewController のナビゲーション バーにはまだロゴがあります。

明らかに、ナビゲーションコントローラーの仕組みについて誤解しています。誰でもこれを修正する方法を教えてもらえますか?

4

2 に答える 2

1

私がそれを正しく理解していれば、別のアプローチでそれを行い、NavigationBar全体を画像に置き換えることもできますか?そこにアイコンを配置できます。

NavigationBar全体を変更するのは非常に簡単だからです。

if ([self.navigationBar respondsToSelector:@selector( setBackgroundImage:forBarMetrics:)]) {
  [self.navigationBar setBackgroundImage:[UIImage imageNamed:@"navigationbar.png"] forBarMetrics:UIBarMetricsDefault];
}

このコードは、 NavigationControllerviewDidLoadのメソッドに配置する必要があります。次に、NavigationControllerのスタックにプッシュするViewControllerでも機能するはずです。

于 2012-04-24T22:05:57.427 に答える
0

使ってみて

self.navigationItem.titleView = yourCustomView;

代わりに

self.navigationController.navigationBar.topItem.titleView = yourCustomView;

そして絶対に触れないself.navigationController.navigationBar.topItem.titleViewでください。最初に、両方を に設定しようとしましたがyourCustomView、カスタム ビューが一瞬表示された後、どこにあるのかわかりません :)

于 2015-01-19T10:50:43.670 に答える