我正在创建一个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)
结果与白色文字相同:
如果您仔细查看图像,导航栏的标题和右侧栏按钮项目都会显示白色文字。
答案 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)
}
您可以根据需要更改字体和颜色。