UIActivityViewController:呈现的视图控制器的色彩

时间:2015-09-27 10:52:34

标签: ios objective-c xcode swift

在应用程序中,我使用白色作为主色调颜色。如果用户打开UIActivityViewController,我将控制器的色调颜色设置为标准iOS蓝色。这对于活动视图本身很有用,但是当想要发送邮件时,色调颜色不是蓝色而是白色。

有一种方法可以设置呈现视图的色调颜色。有吗?

打开MFMailComposeViewController并将色调颜色设置为蓝色也会对显示的UIActionSheet产生影响,如果MFMailComposeViewControllerUIActivityViewController内打开,则不会生效。

请参阅屏幕截图以获取说明:http://i.imgur.com/OggykJF.png

编辑:这是我为将色调颜色添加到UIActivityViewController

所做的
UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:activities];
activityController.view.tintColor = [UIColor blueColor];
[self presentViewController:activityController animated:YES completion:nil];`

4 个答案:

答案 0 :(得分:3)

您可以做的最好的事情是在您呈现之前将窗口的色调颜色设置为系统蓝色或UIActivityViewController上您希望的任何色调颜色,然后在关闭之前将窗口的色调颜色更改回原始颜色。那可行。我就是这样做的:

UIApplication.shared.keyWindow?.tintColor = Styles.color.systemBlue

然后

UIApplication.shared.keyWindow?.tintColor = Styles.color.tint

答案 1 :(得分:2)

无论如何尝试,邮件共享控制器的“取消”和“发送”按钮均为蓝色时,我遇到了同样的问题。我发现调整导航栏外观并不能解决问题。所以我用了这个...

[[UIBarButtonItem appearance] setTintColor:tintColor];

我在“外观”类中执行此操作,该类在加载时被调用并设置所有全局外观。对于导航栏颜色,如果需要在展示共享控制器(UIActivityViewController)之前即时更改它,则可以在首次展示控制器时在完成区中完成。例如:

[self presentViewController:[self _shareController] animated:YES completion:^{
    [[UINavigationBar appearance] setBarTintColor:[UIColor yourNavBarColor]];
}];

答案 2 :(得分:0)

我根本没有设法让它工作,但是您是否考虑过替代方案 - 将文本保留为白色并更改导航栏背景颜色以便显示,例如用:

    UINavigationBar.appearance().backgroundColor = .black

这似乎适用于Mail和Twitter共享屏幕的导航栏上的按钮。

答案 3 :(得分:-1)

在初始化之后但在呈现之前,在UIActivityViewController上设置tintColor。

UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:activities];

//Set the tint color on just the activity controller as needed here before presenting
[activityController.view setTintColor:[UIColor blueColor]];

[self presentViewController:activityController animated:YES completion:nil];