在 activityViewController 中更改 barTintColor

Posted

技术标签:

【中文标题】在 activityViewController 中更改 barTintColor【英文标题】:Change barTintColor in activityViewController 【发布时间】:2018-12-16 18:15:00 【问题描述】:

我有一个 swift 4 / ios 12 应用程序,它为所有视图控制器使用自定义导航栏 barTintColor,并在 appDelegate.swift 中设置如下:

UINavigationBar.appearance().barTintColor = UIColor(red: 229/255, green: 80/255, blue: 57/255, alpha: 1.0)

但是,当我呈现一个activityViewController 时,我想更改颜色,以便邮件撰写视图获得一个白色的barTint。我通过这样做实现了这一点:

let activityViewController = UIActivityViewController(activityItems: textShare , applicationActivities: nil)
            activityViewController.popoverPresentationController?.sourceView = self.view
            self.present(activityViewController, animated: true, completion:  () in

                UINavigationBar.appearance().barTintColor = UIColor.white
            )

但是当我关闭 activityViewController 时,导航栏的 tintColor 已针对整个应用程序发生了变化。这不是我想要的行为。我希望在关闭 activityViewController 时将 tintColor 设置回来,但我不知道如何捕捉“willDisappear”函数以便将其设置回来。

【问题讨论】:

【参考方案1】:

UIActivityViewControllerUIViewController 的子类,因此您可以覆盖其方法,例如viewWillDisappearviewDidAppear 等。

所以首先创建UIActivityViewController 的自定义子类,然后重写它的viewWillDisappear 方法并声明当ViewController 消失时应该发生什么。

class YourActivityViewController: UIActivityViewController 
    override func viewWillDisappear(_ animated: Bool) 
        UINavigationBar.appearance().barTintColor = UIColor(red: 229/255, green: 80/255, blue: 57/255, alpha: 1.0)
    

然后将您的 activityViewController 声明为您的 UIActivityViewController 子类

let activityViewController = YourActivityViewController(activityItems: textShare , applicationActivities: nil)

【讨论】:

它确实改变了 barTintColor 但不是在我转到另一个选项卡之前。当 UIActivityViewController 消失时,导航栏保持白色。

以上是关于在 activityViewController 中更改 barTintColor的主要内容,如果未能解决你的问题,请参考以下文章

为啥 ActivityViewController 在控制台中显示自动约束错误?

在 activityViewController 中更改 barTintColor

UIActivity activityViewController 没有在 iPad 上关闭

UIActivity 自定义 activityViewController 在 iPad 上崩溃

ActivityViewController 无法在 WhatsApp 和 Mail App 上共享链接?

CMD ActivityViewController 在 iOS 8 中崩溃