UIDocumentInteractionController不考虑导航栏色调颜色

时间:2014-10-01 14:44:55

标签: ios uiappearance uidocumentinteraction

我的应用程序中的一个屏幕显示了本地图像的预览,我在左上角有一个操作按钮,用于显示文档交互选项:

- (IBAction)actionButtonTapped:(id)sender {
    self.interactionController = [UIDocumentInteractionController interactionControllerWithURL:self.attachmentLocalUrl];
    self.interactionController.delegate = self;
    [self.interactionController presentOptionsMenuFromRect:self.view.frame inView:self.view animated:YES];
}

这很有效,因为它显示了一个包含选项列表的操作表,包括通过电子邮件发送附件的电子邮件。当我单击电子邮件按钮时,它会显示电子邮件的预览,其中包含我的图像。但有一件事是行不通的。我已经自定义了我的应用程序的外观,以便导航栏在整个应用程序中具有相同的颜色。这是我在我的应用代表中首先运行的代码&didFinishLaunchingWithOptions:

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
[UINavigationBar appearance].barTintColor = [UIColor blueColor];
[UINavigationBar appearance].tintColor = [UIColor whiteColor];
[UINavigationBar appearance].titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor]};

这适用于我自己的视图控制器,但是UIDocumentInteractionController显示的电子邮件预览视图控制器的条形按钮项目为蓝色而不是白色。由于其他参数已正确应用,尤其是导航栏的蓝色背景,“取消”和“发送”操作按钮几乎不可见。

我曾尝试在一个简单的项目中复制这个,但我不能。显然,我在我的应用程序中做了一些事情来干扰正常的自定义。但我无法弄清楚是什么。知道如何调试它吗?

3 个答案:

答案 0 :(得分:1)

你能准确说明你的意思吗?导航栏上的颜色是否在文档选择器或mfmailcomposer上搞定了?这里有一些代码,虽然我必须使用...

如果它在UIDocumentPicker上,请在调用present:

之前设置它
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
{
    [[UIBarButtonItem appearance] setTintColor:[UIColor blackColor]];
    [[UINavigationBar appearance] setTintColor:[UIColor blackColor]];
}

然后将其更改回didPickDocument和didCancel Delegates中的颜色

如果它在MFMailcomposer控制器上,那么使用它:

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
{
    [controller.navigationBar setTintColor:[UIColor blackColor]];
}

希望这有帮助

答案 1 :(得分:0)

我确定了解决方法以在显示UIDocumentController之前清除自定义,然后在呈现UIDocumentController的视图控制器的viewWillAppear()中恢复自定义主题。

func launchDocumentController() {
   UINavigationBar.appearance().titleTextAttributes = nil
   UINavigationBar.appearance().barTintColor = nil
   UINavigationBar.appearance().tintColor = nil
   documentController.presentOptionsMenuFromRect(self.view.frame, inView: self.view, animated: true)
}

然后

public override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    // Restore the reset bar colors
    Theme.current.customizeAppearance()
}

缺少操作系统更新,我认为这是您将获得的最佳“答案”。抱歉。 (当我有机会提出雷达时。)

如果您可以直接访问MFMComposeViewController如上所述设置色调颜色,那么这是一个很好的解决方法。

答案 2 :(得分:0)

这对我来说非常有用:

func documentInteractionControllerViewControllerForPreview(_ controller: UIDocumentInteractionController) -> UIViewController {
    UINavigationBar.appearance().barTintColor = Colors.redColor()
    UINavigationBar.appearance().tintColor = UIColor.white
    UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName : UIColor.white, NSFontAttributeName: UIFont.systemFont(ofSize: 14, weight: UIFontWeightBold)]
    return self
}