現在、UIAppearanceプロキシを使用しているiOSアプリケーションのナビゲーションバーの背景画像をカスタマイズしています。通知をトリガする2つの異なるモードを切り替えるためのボタンがあります。この通知は、再度プロキシを使用して背景を別のイメージに変更します。私の問題は、この変更は別のコントローラに行って初めて表示されるようになったことです。私はコントローラー内のナビゲーションバーの更新を強制することができません。UIAppearanceを使用して変更したナビゲーションバーを更新する
私は私のMainTabBarControllerでこれを試してみた:
- (void) onAppChangedMode: (NSNotification*)notif {
APP_MODE mode = (APP_MODE) [[notif object] integerValue];
// change navigation bar appearance
[[UILabel appearance] setHighlightedTextColor:[UIColor redColor]];
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:(mode == 0 ? @"navbar.png" : @"navbar2.png")] forBarMetrics:UIBarMetricsDefault];
// trying to update
for (UIViewController* vc in self.viewControllers) {
[vc.navigationController.navigationBar setNeedsDisplay];
}
}
何も...それは働いていません。どのようにそれを達成するためのアイデア?
ありがとうございます!
を、私は理由を知りませんが、変更実行時にユーザーピアアンスになるまでの時間は、ロードされたビューには適用されません。ただし、ロードされたビュー自体に変更をすぐに適用することはできます。 – ilmiacs
UIAppearanceを使用することはできませんが、各バーを個別に設定する必要があります。 – Claus
いいえUIAppearanceは使用できますが、表示されるビューは影響を受けません。そのため、バーを明示的に設定する必要があります。 – ilmiacs