我的应用程序中的一个屏幕显示了本地图像的预览,我在左上角有一个操作按钮,用于显示文档交互选项:
- (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显示的电子邮件预览视图控制器的条形按钮项目为蓝色而不是白色。由于其他参数已正确应用,尤其是导航栏的蓝色背景,“取消”和“发送”操作按钮几乎不可见。
我曾尝试在一个简单的项目中复制这个,但我不能。显然,我在我的应用程序中做了一些事情来干扰正常的自定义。但我无法弄清楚是什么。知道如何调试它吗?
答案 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
}