如何更改MFMailComposeViewController的背景颜色?

时间:2015-07-24 09:04:24

标签: ios email viewcontroller

如何更改MFMailComposeViewController的背景颜色? 我试着添加

  

mailController.view.backgroundColor = [UIColor redColor];

但颜色仍然是白色。请帮忙。

1 个答案:

答案 0 :(得分:1)

我开始调试MFMailComposeViewController层次结构。这是我的代码。

MFMailComposeViewController *mailComposeViewController = [[MFMailComposeViewController alloc] init];

[self presentViewController:mailComposeViewController animated:YES completion:^{
    UIViewController* mailViewController = [mailComposeViewController.topViewController.childViewControllers firstObject];
    UIView *mailView = [mailViewController.view.subviews firstObject];
    CALayer *mailLayer = mailView.layer;
    mailLayer.opacity = 0.5f;

    UIView *backgroundView = [[UIView alloc] initWithFrame:mailView.bounds];
    backgroundView.backgroundColor = [UIColor redColor];
    [mailViewController.view insertSubview:backgroundView atIndex:0];
}];

我发现MFMailComposeViewController是一种UINavigationController,它有一个顶视图控制器,它有一个子视图控制器。子视图控制器的视图具有子视图。此子视图是内容存在的位置。

问题是此视图没有子视图。所以我看看它的图层是否有子图层。它不是。通过更改图层alpha并在此视图后面添加具有背景颜色的视图,我们可以清楚地看到此视图确实是我们想要的视图。

经过一些searching后,我发现mailLayer是一个CALayerHost,它不仅可以显示来自其他进程的内容;它还允许用户交互从主机应用程序传递到远程进程。换句话说,这个类是跨进程边界传输用户操作和图形的关键。

所以我认为这是一个死胡同。您将无法优雅地更改背景颜色。