1

iOS の UIAppearanceProxy を使用して、アプリの外観をカスタマイズしています。

ほとんどのアプリでは、navBar に 1 つの背景画像を設定します。アプリの特定のセクションで、navBar に別の背景画像を持たせたいと考えています。

これが私がやっていることですapplication:didFinishLaunchingWithOptions:

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navbar_bg1"]
                                   forBarMetrics:UIBarMetricsDefault];

[[UINavigationBar appearanceWhenContainedIn:[DiscoverViewController class], nil] setBackgroundImage:[UIImage imageNamed:@"navbar_bg2"]                                                   forBarMetrics:UIBarMetricsDefault];

特定のビュー コントローラーで navBar をオーバーライドするのではなく、すべての外観コードを 1 か所に保持したいと考えています。

上記の DiscoverViewController のように、各タブがサブクラス化された ViewController を所有する NavigationController を制御する TabBarController で、私のアプリが構造化されていることも知っておくと役立ちます。

私は何を間違っていますか?

4

1 に答える 1

7

先ほど述べたように、ナビゲーション バーはDiscoverViewController階層に含まれていません。どちらもナビゲーション コントローラーに含まれています。外観コードを一元化する 1 つの方法は、空のサブクラスを作成し、関連する場所ではUINavigationControllerなくインスタンス化することですUINavigationController(それがニブかストーリーボードか、または単にプログラムによるものかに関係なく)。次に、子要素のスタイルを設定するには、「含まれている場合」に外観プロキシを取得しDiscoveryNavigationControllerます。私は過去にこの方法を使用して良い結果を得ました。

于 2013-01-14T23:33:11.620 に答える