2013-01-02 5 views
6

以下のコードは、iOS 5では正常に動作しますが、iOS 6以降では動作しません。 電子メールコンポーザシートでは、navigationBarイメージは他のUINavigationBarクラスとは異なるものにしたいと思います。私は、デバッグポインタが外観メソッドに応答していることを理解できませんが、デバイス上では "bgNavigationBar.png"という名前のnavigationBarイメージを表示します。予想されるのは "bgNavigationBar_2.png"です。IOS 6のサポート - 予期しない結果

私を導いてください.......

if ([[UINavigationBar class]respondsToSelector:@selector(appearance)]) { 
    UIImage *logoImage44 = [[UIImage imageNamed:@"bgNavigationBar.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; 
    [[UINavigationBar appearance] setBackgroundImage:logoImage44 forBarMetrics:UIBarMetricsDefault]; 

    UIImage *ImagePlain = [[UIImage imageNamed:@"bgNavigationBar_2.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; 
    [[UINavigationBar appearanceWhenContainedIn:[MFMailComposeViewController class], nil] setBackgroundImage:ImagePlain forBarMetrics:UIBarMetricsDefault]; 
} 
+0

iOS 6バグ。オープンレーダー - http://www.openradar.me/radar?id=2984402 – Daniel

答えて

7

は、この事はios6で働いていません。

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

ちょうどあなたは、あなたのメールハンドラ・クラスでこのプロパティを設定する必要があります。

if (![[UINavigationBar class]respondsToSelector:@selector(appearance)]) 
{ 
    UIView *backgroundView = [[[UIView alloc] initWithFrame:CGRectMake(0,0,320,44)]autorelease]; 

    [backgroundView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"bgNavigationBar_2.png"]]]; 
    controller.topViewController.navigationItem.titleView = backgroundView ; 
} 
else 
{ 
    UIImage *gradientImagePlain = [[UIImage imageNamed:@"bgNavigationBar_2.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; 
    [[UINavigationBar appearance] setBackgroundImage:gradientImagePlain forBarMetrics:UIBarMetricsDefault]; 
} 

他のすべてのナビゲーションコントローラの背景イメージのイメージをリセットします。

- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result 
{ 
    [self.parentController dismissModalViewControllerAnimated:YES]; 
    UIImage *gradientImagePlain = [[UIImage imageNamed:@"bgNavigationBar.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; 
    [[UINavigationBar appearance] setBackgroundImage:gradientImagePlain forBarMetrics:UIBarMetricsDefault]; 
} 

これはうまくいきます。