Ios 在UIActivityViewController中更改UIBarButtonItems的着色颜色

Ios 在UIActivityViewController中更改UIBarButtonItems的着色颜色,ios,swift,uiactivityviewcontroller,Ios,Swift,Uiactivityviewcontroller,我有一个导航栏,在深色背景上使用白色色调。我使用UIActivityViewController与iOS共享表共享链接 当我选择WhatsApp或Messages app共享内容时,导航按钮具有默认的蓝色色调。此外,搜索栏(WhatsApp的情况下)有一个灰色的色调,这真的很难阅读 我无法改变色调。我的代码: let textToShare = "Visit my website!" if let myWebsite = NSURL(string: "http://google.com") {

我有一个导航栏,在深色背景上使用白色色调。我使用
UIActivityViewController
与iOS共享表共享链接

当我选择WhatsApp或Messages app共享内容时,导航按钮具有默认的蓝色色调。此外,搜索栏(WhatsApp的情况下)有一个灰色的色调,这真的很难阅读

我无法改变色调。我的代码:

let textToShare = "Visit my website!"
if let myWebsite = NSURL(string: "http://google.com") {
    let objectsToShare = [textToShare, myWebsite]
    let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)

    self.presentViewController(activityVC, animated: true, completion: {
        activityVC.navigationController?.navigationBar.tintColor = UIColor.whiteColor()
        activityVC.navigationController?.navigationItem.rightBarButtonItem?.tintColor = UIColor.whiteColor()   
        activityVC.navigationController?.navigationItem.leftBarButtonItem?.tintColor = UIColor.whiteColor()
    })
}
有什么想法吗

编辑:


这不是一个重复的问题,因为它与活动视图控制器的按钮色调无关。它是关于视图控制器的导航控制器的按钮颜色,例如在按下“在iMessage上共享”后显示。

通过在应用程序代理的UIWindow实例上设置tintColor,可以为UIActivityViewController显示的视图控制器设置tintColor。无论何时或如何设置,在UIActivityViewController上设置tintColor似乎都没有效果

在应用程序代理中:

    self.window.tintColor = [theme navBarItemsTintColor];

以上两种解决方案都不适用于我,但我找到了另一种设置tintColor的方法——通过TextAttributes。在UIActivityViewController的
init
viewDidLoad()
中添加以下代码(是的,它仅在iOS 11之后可用):


另外,如果您只想更改当前ViewController的颜色(在我们的UIActivityViewController中),请不要忘记重置Dismission上的值,因为
appearance()
是整个应用程序的全局样式集。

如果在iOS 14.2上共享文件,我必须使用所有这三行来更改“保存”的颜色,“取消”和文件夹图标:

UIButton.appearance(whenContainedInInstancesOf: [UINavigationBar.self]).tintColor = .blue
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UINavigationBar.self]).tintColor = .blue
UIBarButtonItem.appearance().setTitleTextAttributes([.foregroundColor: .blue], for: .normal)
在离开风景区时不得不把它们换回来

  activityVC.completionWithItemsHandler = { (_, _: Bool, _: [Any]?, _: Error?) in
  UIButton.appearance(whenContainedInInstancesOf: [UINavigationBar.self]).tintColor = .white
  UIBarButtonItem.appearance(whenContainedInInstancesOf: [UINavigationBar.self]).tintColor = .white
  UIBarButtonItem.appearance().setTitleTextAttributes([.foregroundColor: .white], for: .normal)
}

我承认它看起来很难看,但这是唯一对我有用的东西

可能重复的外观代理吗?
UINavigationBar.appearance().tintColor=UICcolor.whiteColor
是的,我在
AppDelegate
中这样做了,但不是在演示activityVC之后。编辑:只是在完成块中尝试,但没有成功。
  activityVC.completionWithItemsHandler = { (_, _: Bool, _: [Any]?, _: Error?) in
  UIButton.appearance(whenContainedInInstancesOf: [UINavigationBar.self]).tintColor = .white
  UIBarButtonItem.appearance(whenContainedInInstancesOf: [UINavigationBar.self]).tintColor = .white
  UIBarButtonItem.appearance().setTitleTextAttributes([.foregroundColor: .white], for: .normal)
}