7

次のように、ナビゲーションバーの画像を設定しています。

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

次に、クラスのこの画像が必要ないため、次のMFMessageComposeViewControllerようにして除外します。

[[UINavigationBar appearanceWhenContainedIn:[MFMessageComposeViewController class], nil] setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];

しかし、それは効果がありません (navbar は、 内の私のイメージでスタイル設定されていますMFMessageComposeViewController)。ここで何が欠けていますか?

4

3 に答える 3

4

私の問題の解決策を見つけました:

サブクラス化MFMessageComposeViewController

init メソッドbackgroundImageで、 のnavigationBarを に設定します。nil

出来上がり!

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    if (self) {
        // Custom initialization
        [self.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];

    }
    return self;
}
于 2012-08-18T15:43:48.630 に答える
2

MFMessageComposeViewControllerを提示する直前に試してください

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

そしてmessageComposeViewController:didFinishWithResultで:コールバックはにリセットされます

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

また、MFMessageComposeViewControllerの.navigationBar.tintColorプロパティを設定して、キャンセルボタンをMyUINavigationBarImageClearイメージと一致させます。

于 2012-10-30T08:45:52.537 に答える
0

ここに2つのアイデアがあります(ただしテストされていません):

1) nil でオーバーライドしようとしてもうまくいかないと思います-そのステートメントは無視されます。私がお勧めするのは、透明な画像を作成し、それを MFMessageComposeViewController の背景として使用することです。

2)それが失敗した場合、画像をいつ使用するかを非常に具体的にする必要があると思われるため、最初のステートメントを、クラス全体をカバーする「に含まれる」ステートメントの長いリストに置き換える必要があります。すべてのView Controllerが使用するサブクラス(基本クラス)がある場合は、代わりにそれを使用できると思います。うまくいけば、#1がうまくいきます!

于 2012-08-18T14:03:09.050 に答える