使用 UIAppearance 代理自定义字体时,MFMailComposeViewController 不起作用

Posted

技术标签:

【中文标题】使用 UIAppearance 代理自定义字体时,MFMailComposeViewController 不起作用【英文标题】:MFMailComposeViewController does not work when customizing font with UIAppearance proxy 【发布时间】:2013-03-08 09:29:49 【问题描述】:

当我不在我的应用程序中自定义字体时,MFMailComposeViewController 会显示并且工作正常。但是当我这样做时,有 50% 的时间会显示并直接使用 mailComposeController:didFinishWithResult: 调用他的代表,结果为 MFMailComposeResultCancelled,就像用户只是尝试关闭它一样。

并且还会在控制台触发这个错误:

_serviceViewControllerReady:error: Error Domain=XPCObjectsErrorDomain Code=2 "The operation couldn’t be completed. (XPCObjectsErrorDomain error 2.)"

看起来邮件编辑器不喜欢外观代理,但问题是不可能为它禁用外观代理。

对于我的应用程序中的每个导航栏,我都有一个自定义设计。为了实现这一点,我使用了这样的外观代理:

UIImage *navBarBackground = [UIImage stretchableHorizontalImageNamed:@"navbar-background"];
[[UINavigationBar appearance] setBackgroundImage:navBarBackground forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setShadowImage:[UIImage imageNamed:@"navbar-shadow"]];
[[UINavigationBar appearance] setTitleTextAttributes:@
    UITextAttributeTextColor: [UIColor colorWithRed:0.965f green:0.635f blue:0.647f alpha:1.f],
    UITextAttributeFont : [UIFont brothersBoldFontOfSize:20.f],
    UITextAttributeTextShadowColor: [UIColor blackColor],
    UITextAttributeTextShadowOffset: [NSValue valueWithUIOffset:UIOffsetMake(0, -1)]
];

UIBarButtonItem *navBarButtonItemAppearance = [UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil];
[navBarButtonItemAppearance setTitleTextAttributes:@
    UITextAttributeTextColor: [UIColor colorWithRed:0.478f green:0.008f blue:0.023f alpha:1.f],
    UITextAttributeFont : [UIFont brothersBoldFontOfSize:17.f],
    UITextAttributeTextShadowColor: [UIColor colorWithWhite:1.f alpha:0.3f],
    UITextAttributeTextShadowOffset: [NSValue valueWithUIOffset:UIOffsetMake(0, 1)]
 forState:UIControlStateNormal];

我删除了弹出框的一些背景自定义,如下所示:

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

弹出框效果很好。但无法为邮件编写器删除它,即使我使用“包含在”MFMailComposeViewController 并将其设置为nil,它仍然存在。

我也尝试将其子类化或设置系统字体,但这并没有改变任何东西。他得到介绍,打印错误,打电话给他的代表并被解雇。我刚刚看到,当它工作时,系统没有应用字体,当它没有应用时,它会显示如下自定义字体。

【问题讨论】:

嘿,你有解决办法吗?因为我面临同样的问题,并且从几天开始也在谷歌搜索。如果您成功解决了这个问题,请告诉我... :) 我找到了解决方案....如果您在任何类中使用UINavigationBar 设置了自定义字体,那么它将影响MFMailComposeViewController。因此,您从所有类中删除自定义 Navigationbar 字体,它会正常工作。我认为这是唯一的解决方案。您可能已经使用导航栏设置了自定义字体... :) 【参考方案1】:

问题是自定义字体加载时间过长,并且会触发等待栅栏的超时。

见:MFMailComposeViewController throws a viewServiceDidTerminateWithError and then exits when using a custom title font

【讨论】:

我也看到了这个链接,但是没有解决办法。解决方法代码不起作用(在 ios 6 上)。

以上是关于使用 UIAppearance 代理自定义字体时,MFMailComposeViewController 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

重置文本时覆盖外观代理

检测自定义按钮的 UIAppearance 代理中的更改

如何在MonoTouch中为继承的视图创建UIAppearance代理?

UIPageControl + UIAppearance

UINavigationBar 横向标题字体大小

与自定义视图控制器一起使用时,UINavigationBar 的 UIAppearance 不起作用...?