Ios 如何在Swift中更改UIBarbuttonite字体?
我通常是一个耐心的调试器,花很多时间在谷歌上搜索问题的答案。然而,我的耐心已经耗尽,我开始相信这根本不可能 然而,我正在使用导航栏开发一个iOS应用程序,并选择在整个用户界面中使用“Optima”字体。我可以更改导航栏标题的字体,也可以在初始视图中更改自定义导航栏按钮。但是,在任何后续视图中,“我的后退”按钮上的字体是系统的默认字体。就我的一生而言,我找不到改变这一切的方法 我尝试过搜索中出现的所有东西,最接近我的成功是来自 下面的代码对我来说很有用,但将“后退”按钮更改为图像当然不是我希望的那样更改字体Ios 如何在Swift中更改UIBarbuttonite字体?,ios,swift,uibarbuttonitem,Ios,Swift,Uibarbuttonitem,我通常是一个耐心的调试器,花很多时间在谷歌上搜索问题的答案。然而,我的耐心已经耗尽,我开始相信这根本不可能 然而,我正在使用导航栏开发一个iOS应用程序,并选择在整个用户界面中使用“Optima”字体。我可以更改导航栏标题的字体,也可以在初始视图中更改自定义导航栏按钮。但是,在任何后续视图中,“我的后退”按钮上的字体是系统的默认字体。就我的一生而言,我找不到改变这一切的方法 我尝试过搜索中出现的所有东西,最接近我的成功是来自 下面的代码对我来说很有用,但将“后退”按钮更改为图像当然不是我希望的那
self.navigationController?.navigationBar.backIndicatorImage = UIImage(named: "Tab_Trophy")
self.navigationController?.navigationBar.backIndicatorTransitionMaskImage = UIImage(named: "Tab_Trophy")
self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.Plain, target: nil, action: nil)
(顺便说一下,上面的代码在view my back按钮的viewDidLoad()中,该按钮会将用户发送到)
无论如何,我也尝试过在不同的地方使用下面的setTitleTextAttributes,但是没有用
setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Optima", size: 19.0)!], forState: .Normal)
所以我的问题是:这能做到吗?或者我应该用我想要的字体制作一个带有文本的图像,并使用上面的代码吗?您可以更改应用程序的所有
UIBarButtonItem
标签的字体。您可以这样做:
UINavigationBar.appearance().titleTextAttributes = [
NSFontAttributeName: UIFont(name: "Optima", size: 19.0)!
]
或者,如果您只想自定义单个标签,则可以使用具有以下内容的自定义按钮:
let button = UIButton()
// Customise button as required
let barButtonItem = UIBarButtonItem(customView: button)
以下代码将更改顶部“导航栏”和底部“工具栏”项目的字体(UINavigationBar.appearance()。titleTextAttributes仅更改导航栏) 注:
- 它使用以下方式设置导航栏字体: navigationController.navigationBar.titleTextAttributes
- 它通过循环遍历每个工具栏项并使用以下命令来设置工具栏项: toolbarItem.setTitleTextAttributes
- 它在ViewDidLayoutSubView中运行,因此添加到情节提要工具栏中的项目也将受到影响。如果您以编程方式执行所有操作,则可以将其放置在viewDidLoad或ViewWillDisplay中
- boolean firstShow只是为了防止每次用户旋转设备时都运行此代码。不完全是必需的(如果将代码移动到viewDidLoad/viewwillbeforeived,则不需要),但效率更高一些
- 字体的展开可能看起来有点迂腐,但如果苹果在未来版本的iOS中撤回你的命名字体,应用程序将崩溃
- 它没有为按钮栏项目指定颜色(这样做会弄乱它们的突出显示/未突出显示的颜色)-而是使用默认的应用程序色调(例如在故事板中)来指定它们的颜色
- 它确实为导航栏指定了一种颜色(导航栏标题的应用程序色调被忽略,但它不受其按钮中突出显示/未突出显示问题的影响)
- 更改“AmericanTypewriter”的颜色,并根据需要添加其他属性
- 分享和享受
var firstShow = false override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() if firstShow { let navbarAttributes:[String:Any] let toolbarAttributes:[String:Any] if let font = UIFont(name: "AmericanTypewriter", size: 22.0) { navbarAttributes = [ NSFontAttributeName: font, NSForegroundColorAttributeName : UIColor.init(red:1.0, green:0, blue:0, alpha:1.0) ] toolbarAttributes = [ NSFontAttributeName: font ] } else { navbarAttributes = [ NSForegroundColorAttributeName : UIColor.init(red:1.0, green:0, blue:0, alpha:1.0) ] toolbarAttributes = [:] } navigationController?.navigationBar.titleTextAttributes = navbarAttributes if let toolbarItems = navigationController?.toolbar.items { for toolbarItem in toolbarItems { toolbarItem.setTitleTextAttributes(toolbarAttributes, for: .normal) toolbarItem.setTitleTextAttributes(toolbarAttributes, for: .disabled) } } firstShow = false } }