iOS – apariencia de aparición de UIA cuando se contiene

Estoy configurando una image para mi barra de navigation así:

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

Entonces no quiero esta image para las classs de MFMessageComposeViewController así que lo excluyo haciendo esto:

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

Pero no tiene ningún efecto (la barra de navigation todavía tiene un estilo con mi image dentro del MFMessageComposeViewController ). ¿Que me estoy perdiendo aqui?

Encontré la solución a mi problema:

Subclass MFMessageComposeViewController

En el método init establece el backgroundImage de la navigationBar de navigationBar a nil

Voilá!

 - (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; } 

Justo antes de presentar el bash MFMessageComposeViewController

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

y en el post ComposeViewController: didFinishWithResult: reset de callback a

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

También estoy configurando la propiedad .navigationBar.tintColor del MFMessageComposeViewController para get el button de cancelación para que coincida con mi image MyUINavigationBarImageClear.

Dos ideas aquí (pero no probadas):

1) Sospecho que tratar de anular con nil no va a funcionar, se ignora esa statement. Lo que sugiero que haga es crear una image transparente y usar eso como background para MFMessageComposeViewController.

2) Si eso falla, entonces sospecho que tendrá que ser muy específico sobre cuándo usar su image, por lo que tendrá que replace la primera statement con una larga list de declaraciones "cuando están contenidas en" que cubran toda su class. si tiene una subclass que usan todos sus controlleres de vista (alguna class base), creo que puede usarla. ¡Esperemos que # 1 funcione!