更改MFMailComposeViewController navigationBar标题字体

时间:2012-06-23 23:04:18

标签: ios objective-c iphone ipad mfmailcomposeviewcontroller

我有MFMailComposeViewController,当我设置主题时,它也会将其设置为主题。 问题是如何自定义标题和颜色的字体?

MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
[picker setSubject:@"Feedback for MyApp"];

3 个答案:

答案 0 :(得分:8)

我已经为所有视图控制器的所有导航栏的app-delegate更改了我的应用程序的字体。如果您不介意更改所有导航栏标题字体,请在applicationDidFinishLaunching:withOptions:

中添加以下内容
    if ([[UINavigationBar class] respondsToSelector:@selector(appearance)])
        // set the navigation bar font to "courier-new bold 14"
        [[UINavigationBar appearance] setTitleTextAttributes:
         [NSDictionary dictionaryWithObjectsAndKeys:[UIColor lightGrayColor], UITextAttributeTextShadowColor,
                                                    [NSValue valueWithUIOffset:UIOffsetMake(1, 0)], UITextAttributeTextShadowOffset,
                                                    [UIFont fontWithName:@"CourierNewPS-BoldMT" size:14.0], UITextAttributeFont, 
                                                    nil]];

更新的 如果你想让它特定于这一个案例,你可以使用appearanceWhenContainedIn:使用Alexander Akers在下面的评论中建议的参数,因为UIViewController继承自UIAppearanceContainer。我知道appearanceWhenContainedIn:适用于其他情况,例如UINavigationBar中包含的UIBarButtonItems,所以它应该适用于这种情况。

答案 1 :(得分:3)

我的猜测是因为跨进程限制而无法完成。我可以更改颜色,大小和字体(如果它是内置系统字体),但尝试将其更改为我的应用程序中包含的任何字体都会失败。

答案 2 :(得分:-1)

由于MFMailComposeViewControllerUINavigationController的实例,您可以按如下方式设置其topViewController的titleView:

UIViewController *controller = [mailController topViewController];

UIView *titleView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 170.0f, 44.0f)];
titleView.backgroundColor = [UIColor clearColor];

UILabel *label = [[UILabel alloc] initWithFrame:titleView.bounds];
label.textColor = [UIColor whiteColor];
label.backgroundColor = [UIColor clearColor];
label.text = @"Custom Font";
label.font = [UIFont italicSystemFontOfSize:27.0f];
label.textAlignment = UITextAlignmentCenter;

[titleView addSubview:label];
[label release];

controller.navigationItem.titleView = titleView;
[titleView release];