我尝试通过外观代理设置UIButton
的字体。但它似乎没有用。这就是我的尝试。
UIButton.appearance().titleFont = UIFont(name: FONT_NAME_DEFAULT, size:20.0)
UIButton.appearance().titleLabel?.font = UIFont(name: FONT_NAME_DEFAULT, size:20.0)
如何在iOS 8中通过外观代理设置UIButton
字体?
编辑:在vaberer的link中找到:“我很惊讶UIButton没有任何UI_APPEARANCE_SELECTOR属性,但符合UIAppearance协议。”
答案 0 :(得分:9)
主题应用程序存在同样的问题。
// UIButton+TitleLabelFont.swift
import UIKit
extension UIButton {
var titleLabelFont: UIFont! {
get { return self.titleLabel?.font }
set { self.titleLabel?.font = newValue }
}
}
UIButton
外观原型对象class Theme {
static func apply() {
applyToUIButton()
// ...
}
// It can either theme a specific UIButton instance, or defaults to the appearance proxy (prototype object) by default
static func applyToUIButton(a: UIButton = UIButton.appearance()) {
a.titleLabelFont = UIFont(name: FONT_NAME_DEFAULT, size:20.0)
// other UIButton customizations
}
}
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
Theme.apply()
// ...
return true
}
如果您之前正在从故事板预加载内容(lazy var
VC),那么最好不要使用app委托设置覆盖初始化程序中的主题内容,如下所示:
private var _NSObject__Theme_apply_token: dispatch_once_t = 0
extension NSObject {
override public class func initialize() {
super.initialize()
// see also: https://stackoverflow.com/questions/19176219/why-am-i-getting-deadlock-with-dispatch-once
var shouldRun = false
dispatch_once(&_NSObject__Theme_apply_token) {
shouldRun = true
}
if shouldRun {
Theme.apply()
}
}
}
答案 1 :(得分:2)
Barry的答案很好用,但是UIButton扩展实现已过时-您需要像这样声明var titleLabelFont
:
@objc dynamic var titleLabelFont: UIFont! {
get { return self.titleLabel?.font }
set { self.titleLabel?.font = newValue }
}
在此处查看完整的实现:http://blog.iseinc.biz/use-uiappearance-create-ios-app-themes
答案 2 :(得分:0)
当包含在按钮中时,可以将其应用于标签:
UILabel.appearance(whenContainedInInstancesOf: [UIButton.self])
.font = .systemFont(ofSize: 19, weight: .medium)
答案 3 :(得分:0)
使用 UIAppearance 设置 UIButton 的字体如下:
label = UILabel.appearance(whenContainedInInstancesOf: [UIButton.self])
label.font = UIFont.systemFont(ofSize: 20)
您可以在 AppDelegate 的方法 application(_:, didFinishLaunchingWithOptions:)
或任何适合为您的应用程序设置主题的地方添加上述代码。
在 UIViewController.viewDidLoad
中,将按钮实例的 adjustsFontForContentSizeCategory
的 titleLabel
属性设置为 true。
class ExampleVC: UIViewController
@IBOutlet weak var btnOkay: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
btnOkay.titleLabel?.adjustsFontForContentSizeCategory = true
}
}
答案 4 :(得分:-2)
您正尝试在UILabel
内设置UIButton
字体。由于UILabel
未使用UI_APPEARANCE_SELECTOR标记。你不能这样做。