I am using the UIAppearance protocol to set the background image of UINavigationBar objects throughout my app.
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"image-name"] forBarMetrics:UIBarMetricsDefault];
I would like to override this for instances of MFMailComposeViewController so that the default style navigation bar is displayed. I attempted to use appearanceWhenContainedIn to set this and this works on iOS 5 but not on iOS 6.
[[UINavigationBar appearanceWhenContainedIn:[MFMailComposeViewController class], nil] setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
Am I making an error or is there a better way to accomplish this?
Simply set the tintColor on the MFMailComposeViewController instance:
The Mail Composer view is run in a different process under iOS 6 and cannot be tampered with directly (since the view is essentially inside another app). You cannot customize what it shows, it's the same for the Twitter & Facebook views.
Here is a more detailed description of remote view controllers: http://oleb.net/blog/2012/10/remote-view-controllers-in-ios-6/
Changing the appearance of a MFMailComposer through normal measures is not possible, but there is a little workaround you can do, which I've used many times before.
Add two methods to the class in which you wish to implement the new look to:
Now in your show method, apply the special composer interface changes you'd like to make.
And in your delegate, change the interface back to the way it was.