我在App Delegate中有这段代码:
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"Nav Bar.png"] forBarMetrics:UIBarMetricsDefault];
这很好用,但我使用MFMailComposeViewController
,我希望它具有默认的NavigationBar外观。
我该怎么做?
编辑:
我试过这段代码:
[[UINavigationBar appearanceWhenContainedIn: [MFMailComposeViewController class], [UIViewController class], nil] setBackgroundImage:[UIImage imageNamed:@"Textured Background.png"] forBarMetrics:UIBarMetricsDefault];
我也试过只有这个代码。没有什么变化。默认导航栏,包括邮件视图控制器。
我认为它可能与appearanceWhenContainedIn:
有关。有谁知道MFMailComposeViewController
会包含哪些内容?
答案 0 :(得分:6)
我明白了!这是代码:
[[UINavigationBar appearance] setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
MFMailComposeViewController *emailVC = [[MFMailComposeViewController alloc] init];
//the rest of the implementation goes here...
[self presentViewController:emailVC animated:YES completion:nil];
然后,我在此处将导航栏外观恢复正常:
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"Nav Bar.png"] forBarMetrics:UIBarMetricsDefault];
[self dismissViewControllerAnimated:YES completion:nil];
}
答案 1 :(得分:0)
你可以试试这个:
[UINavigationBar appearanceWhenContainedIn: [MFMailComposeViewController class], nil]
这意味着MFMailComposeViewController类中包含的所有导航栏
来自文档:UIAppearance
这将返回外观代理,因此您可以像这样修改它:
[[UINavigationBar appearanceWhenContainedIn: [MFMailComposeViewController class], nil] setBackgroundImage:myImage];
希望有所帮助。