3

だから私は apprearance api を使用してすべてのビューをスタイリングしています。UINavigationBar以下を使用してスタイルを設定します。

[[UINavigationBar appearance] setBackgroundImage:navigationBarBgImage forBarMetrics:UIBarMetricsDefault];

すべての s を 1 か所でスタイリングするという外観 API の利点を利用したいUINavigationBarので (それらが複数あるため)、スタイリング上の理由だけでサブクラス化を行いたくありません。

MFMessageComposeViewControllerまた、いくつかの s と aをポップアップSLComposeViewControllerして、imessage または facebook に投稿します。

ここで私の問題は、facebook でアルバムを選択したり、imessage modalview で連絡先を選択しようとすると、次のようになることです。

ここに画像の説明を入力

imessage モーダル ビューの再帰的な説明を参照してください。

$0 = 0x1f1f1320 <UIWindow: 0x1e5c8900; frame = (0 0; 320 568); layer = <UIWindowLayer: 0x1e5c8a00>>
   | <UILayoutContainerView: 0x1e592860; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x1e592910>>
   |    | <UINavigationTransitionView: 0x1f1c88a0; frame = (0 0; 320 568); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x1f1c8960>>
   |    |    | <UIViewControllerWrapperView: 0x1f1ee090; frame = (0 20; 320 548); autoresize = W+H; layer = <CALayer: 0x1f2f9560>>
   |    |    |    | <UIView: 0x1f2f3d20; frame = (0 0; 320 548); autoresize = W+H; layer = <CALayer: 0x1f2f3d80>>
   |    |    |    |    | <_UISizeTrackingView: 0x1f2effd0; frame = (0 0; 320 548); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x1f2f00b0>>
   |    |    |    |    |    | <_UIRemoteView: 0x1f2f01e0; frame = (0 0; 320 568); transform = [0.5, -0, 0, 0.5, -0, 0]; userInteractionEnabled = NO; layer = <CALayerHost: 0x1f2f0330>>

デフォルトモードに戻すのに最適なアイデアはありますか?

4

3 に答える 3

4

あなたの最善の策は、本当にどちらかをサブクラス化することです。そうしないと、どこでもスタイルを元に戻すことになります。次の 2 つの方法のいずれかで行います。

1 つは、そのクラスに含まれるをサブクラス化UINavigationControllerし、スタイルを設定することです。UINavigationBar

UINavigationBar *navigationBarProxy = [UINavigationBar appearanceWhenContainedIn:[MyNavigationController class], nil]; // 
[navigationBarProxy setBackgroundImage:navigationBarBackgroundImage forBarMetrics:UIBarMetricsDefault];
// and so on

別の方法は、代わりにサブクラスUINavigationBar化し、そのクラスの外観を設定し、UINavigationControllerこの方法でインスタンス化することです。

UINavigationController *navigationController = [[UINavigationController alloc] initWithNavigationBarClass:[MyNavigationBar class] toolbarClass:nil];
// navigationController now has a navigationBar of your preferred type
于 2012-11-16T11:18:02.990 に答える
2

考えられる解決策は、ナビゲーションバーを元の色合いに設定することです。[UINavigationBar appearanceWhenContainedIn:[SLComposeViewController class]] ...

于 2012-11-05T21:12:19.107 に答える
1

同じ問題が発生し、さらに悪いことに、SLComposeViewControllerやMFMailComposeViewControllerなどのXPC/UIRemoteViewベースのコントローラーのいずれかでアプリがクラッシュしていました。

私の解決策はこれを使用することです:

[[UINavigationBar appearanceWhenContainedIn:[RootViewController class], nil] setBackgroundImage:[UIImage imageNamed:@"navbar.png"] forBarMetrics:UIBarMetricsDefault];

それ以外の:

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navbar.png"] forBarMetrics:UIBarMetricsDefault];

ここで、RootViewControllerは、アプリのすべてのサブビューを含むUIViewControllerに名前を付けたものです。

すべての場合に機能するわけではありませんが(コントローラーが階層内でどのように終了するかによって異なります)、ちょっと、それは何かです。

于 2012-12-10T06:21:40.733 に答える