1

このコードを使用して、アプリ全体でナビゲーション バーの画像をカスタマイズしています。

UIImage *navBarTexture = [[UIImage imageNamed:@"NavBarTexture_iPad"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
    [[UINavigationBar appearance] setBackgroundImage:navBarTexture forBarMetrics:UIBarMetricsDefault];
    [[UINavigationBar appearance] setBackgroundImage:navBarTexture forBarMetrics:UIBarMetricsLandscapePhone];

これは驚異的に機能します。ただし、この画像を UIPopoverControllers のナビゲーション バーで使用すると、少し奇妙に見えます。デフォルトの Apple イメージを使用したいのですが、元の外観を維持するにはどうすればよいですか?

使用できることはわかっていますがappearanceWhenContainedIn:、画像として nil を返すと、黒いスペースが表示されます。

4

1 に答える 1

2

最初に頭に浮かんだのは、カスタマイズする前に、ナビゲーションバーからデフォルトの画像を取得することです。私はそれがうまくいったことにショックを受けました。

UINavigationBar *appearanceProxBar = [UINavigationBar appearance];
UIImage *defaultImage = [appearanceProxBar backgroundImageForBarMetrics:UIBarMetricsDefault];
[appearanceProxBar setBackgroundImage:navBarTexture forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearanceWhenContainedIn:[UIPopoverController class], nil] setBackgroundImage:defaultImage forBarMetrics:UIBarMetricsDefault];

また、回答からわかるように、iOSでのWWDC 2012 --216 --Advanced Appearance Customizationには、コンパイラが認識されないセレクターとコードの完了を警告できるように、外観プロキシを適切なクラスのインスタンスにキャストするという巧妙なトリックがありました。より正確です。

于 2012-09-15T22:00:00.053 に答える