1

我的 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里面会包含什么?

4

2 回答 2

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];
}
于 2013-08-07T03:38:25.520 回答
0

你可以试试这个:

[UINavigationBar appearanceWhenContainedIn: [MFMailComposeViewController class], nil]

这意味着 MFMailComposeViewController 类中包含的所有导航栏

来自文档:UIAppearance

这将返回外观代理,因此您可以像这样修改它:

[[UINavigationBar appearanceWhenContainedIn: [MFMailComposeViewController class], nil] setBackgroundImage:myImage];

希望有帮助。

于 2013-08-07T01:09:51.347 回答