如何更改MFMailComposeViewController的背景颜色? 我试着添加
mailController.view.backgroundColor = [UIColor redColor];
但颜色仍然是白色。请帮忙。
答案 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
,它不仅可以显示来自其他进程的内容;它还允许用户交互从主机应用程序传递到远程进程。换句话说,这个类是跨进程边界传输用户操作和图形的关键。
所以我认为这是一个死胡同。您将无法优雅地更改背景颜色。