我的应用程序通过UIActivityController显示iMessages ViewController。然而,标签的颜色都搞砸了(蓝色,因此它们几乎看不见)。我认为这是因为视图控制器正在使用我的应用程序的色调。见下文。
我该如何解决这个问题? 谢谢!
答案 0 :(得分:0)
我遇到类似的事情,以模态方式呈现MFMailComposerViewController
。尝试在呈现活动控制器时将应用的色调颜色外观设置为nil
,然后在完成后返回到所需的应用色调。这是我对MFMailComposer
所做的事情。您应该能够为您的活动控制器进行修改:
...
[[UINavigationBar appearance] setBarTintColor:nil]; // Set to default before presenting
MFMailComposeViewController *mailVC = [[MFMailComposeViewController alloc] init];
mailVC.mailComposeDelegate = self;
[self.navigationController presentViewController:mailVC animated:YES completion:nil];
...
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
[[UINavigationBar appearance] setBarTintColor:MyAppsCustomColor]; // set it back when finished
[self.navigationController dismissViewControllerAnimated:YES completion:nil];
}
修改强>
当我使用此解决方案时,它会更改在活动视图控制器中选择的呈现模式中的导航栏外观(消息,邮件等)。我在我的代理中将我的应用的导航栏外观设置为蓝色,然后在完成块中将其设置为蓝色。应用程序的导航栏保持蓝色,显示的消息/邮件模式显示为默认的浅灰色导航栏。
UIActivityViewController* avc =
[[UIActivityViewController alloc] initWithActivityItems:@[@""]
applicationActivities:nil];
avc.completionHandler = ^(NSString *activityType, BOOL completed) {
// ...
dispatch_async(dispatch_get_main_queue(), ^{
// Set tint color back to blue.
// This block is executed whether the user finishes or cancels.
[[UINavigationBar appearance] setBarTintColor:[UIColor blueColor]];
[[self navigationController] setNeedsStatusBarAppearanceUpdate];
});
};
[[UINavigationBar appearance] setBarTintColor:nil];
[self presentViewController:avc animated:YES completion:nil];