UIActivityViewController更改导航栏文本颜色

时间:2017-06-02 18:44:37

标签: ios swift uiactivityviewcontroller

我正在创建一个UIActivityViewController并尝试在点击共享消息图标后更改其文本颜色。

默认情况下,我将AppDelegate中的导航栏文字颜色设置为白色,如此

UINavigationBar.appearance().tintColor = whiteColor
UIBarButtonItem.appearance().tintColor = whiteColor

但是对于UIActivityViewController,我想将其设为默认值(即黑色标题文本和蓝色Cancel按钮)

我试过以下没有运气:

let shareText = "text to share"
let activityViewController = UIActivityViewController(activityItems: [shareText], applicationActivities: [])

activityViewController.navigationController?.navigationBar.tintColor = UIColor.black
activityViewController.navigationController?.navigationItem.rightBarButtonItem?.tintColor = UIColor.blue

present(activityViewController, animated: true, completion: nil)

结果与白色文字相同:

如果您仔细查看图像,导航栏的标题和右侧栏按钮项目都会显示白色文字。

enter image description here

4 个答案:

答案 0 :(得分:4)

在iOS 11中,您可以通过消息屏幕更改取消按钮颜色"分享"通过设置:

UIButton.appearance(whenContainedInInstancesOf: [UINavigationBar.self]).tintColor = .blue

答案 1 :(得分:2)

对于其他试图做类似事情的人。 UIActivityViewController在完成时为我们提供了回调。我们可以做的是,更改UIBarButtonItem的颜色,然后在完成后将其设置回我们的原始颜色。

对我来说,完成处理程序未正确将颜色设置回原始颜色,因此我将不得不在viewWillAppear中进行设置。

// Setting the required color for the bar buttons on share activities
UIBarButtonItem.appearance().setTitleTextAttributes([.foregroundColor: UIColor.yourRequiredColor], for: .normal)

// Re-setting the default color for the bar buttons again on activity's completion
activityViewController.completionWithItemsHandler = { (activityType, completed:Bool, returnedItems:[Any]?, error: Error?) in
    UIBarButtonItem.appearance().setTitleTextAttributes([.foregroundColor: UIColor.yourOriginalColor], for: .normal)
}

答案 2 :(得分:0)

如果您在应用程序委托类中自定义导航栏,则应在共享操作之前(按下共享按钮等时)进行更改,但不要忘记在完成或取消共享操作后将其更改回,因此您需要在您具有共享操作的类的viewWillAppear函数上自定义导航栏。

应该是这样的

class ShareActionViewController: UIViewController {

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        //this should be same with your appDel settings:
        UINavigationBar.appearance().tintColor = .white
        UINavigationBar.appearance().barTintColor = .appPurpleColor
    }

    fileprivate func shareButtonPressed() {
        UINavigationBar.appearance().tintColor = .purple
        UINavigationBar.appearance().barTintColor = .white 
    }

}

答案 3 :(得分:-1)

我正在使用iOS 12,并且在执行此操作时就可以使用:

static func setSystemNavigationBar() {
    UINavigationBar.appearance().tintColor = .black
    UINavigationBar.appearance().titleTextAttributes =
        [NSAttributedString.Key.foregroundColor : UIColor.black,
         NSAttributedString.Key.font: UIFont(name: "Aller", size: 20)!]
    UIBarButtonItem.appearance().setTitleTextAttributes([.foregroundColor: UIColor.blue], for: .normal)
}

您可以根据需要更改字体和颜色。