MFMailComposeViewController 忽略了 iOS 7 中的一些 UIAppearance 协议

Posted

技术标签:

【中文标题】MFMailComposeViewController 忽略了 iOS 7 中的一些 UIAppearance 协议【英文标题】:MFMailComposeViewController ignoring some of UIAppearance protocol in iOS 7 【发布时间】:2013-10-11 13:46:39 【问题描述】:

我有一个仅限 ios 7 的应用程序,它使用 UIAppearance 在整个应用程序中设置 UINavigationBar 的样式。

我的 AppDelegate 中有以下代码:

[[UINavigationBar appearance] setBackgroundImage:redImage forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearanceWhenContainedIn:[MFMailComposeViewController class], nil] setBackgroundImage:blueImage forBarMetrics:UIBarMetricsDefault];

然而 MFMailComposeViewController 以 redImage 背景出现!

文档说明如下:

重要提示:这个类的视图层次是私有的,你不能修改它。但是,您可以使用 UIAppearance 协议自定义实例的外观。

所以没有理由上述不应该工作,我 100% 确定redImageblueImage 是不同颜色的图像。

还有其他人遇到过这个问题吗?我猜这是 iOS 7 中的一个错误,但我没有时间检查 iOS 6(我使用 iPad 4 得到这些结果)。

【问题讨论】:

您是否尝试在显示作曲家之前设置外观? @LeszekŻarna 是的,绕过它的一个技巧是在我呈现它之前设置全局外观,然后在我关闭它之前将其更改回来..但这似乎不切实际,我想知道是否有一个适当的修复它 @LeszekŻarna 你遇到过类似的事情吗?我被卡住了***.com/questions/20768736/… 【参考方案1】:

您可以直接在 MFMailComposeViewController 上设置外观

MFMailComposeViewController *mailViewController = [[MFMailComposeViewController alloc] init];
[MFMailComposeViewController.navigationBar setBackgroundImage:blueImage forBarMetrics:UIBarMetricsDefault];

【讨论】:

至少现在没有了。

以上是关于MFMailComposeViewController 忽略了 iOS 7 中的一些 UIAppearance 协议的主要内容,如果未能解决你的问题,请参考以下文章