如何在iOS中全局更改字体大小

时间:2017-11-01 16:26:44

标签: ios swift

我正在尝试编写扩展程序,以更改UIControl组件字体大小

extension UIViewController {

func changeFontSize(){
    for v in self.view.subviews{
        var fontSize = CGFloat(10)
        if let V = v as? UIButton       {V.titleLabel?.font = V.titleLabel?.font.withSize(fontSize)}
        if let V = v as? UILabel        {V.font = V.font.withSize(fontSize)}
        if let V = v as? UITextField    {V.font = V.font?.withSize(fontSize)}
    }
}

我的问题是UITableView等一些组件,如何访问单元格元素,以及UITableView Section标题组件,以便我使扩展名也改变所有类型文本字体的所有子视图?

2 个答案:

答案 0 :(得分:5)

您需要一个递归实现,以便进入任何视图的子视图。您的扩展程序应位于UIView,而不是UIViewController

extension UIView {
    func changeFontSize(){
        let fontSize = CGFloat(10)
        if let v = self as? UIButton {
            v.titleLabel?.font = v.titleLabel?.font.withSize(fontSize)
        } else if let v = self as? UILabel {
            v.font = v.font.withSize(fontSize)
        } else if let v = self as? UITextField {
            v.font = v.font?.withSize(fontSize)
        } else {
            for v in subviews {
                v.changeFontSize()
            }
        }
    }
}

如果您希望在视图控制器上调用它,请执行以下操作:

someViewController.view.changeFontSize()

答案 1 :(得分:2)

另一个常见选项是使用UIAppearance

由于UIButton使用UILabel作为子视图,因此它也适用于此。

extension UILabel {
    var defaultFont: UIFont? {
        get { return self.font }
        set { self.font = newValue }
    }
}


UILabel.appearance().defaultFont = UIFont.systemFont(ofSize: 25)

重复UITextField和其他控件。

改编自https://stackoverflow.com/a/36324142/127422

另见NSHipster's post on UIAppearance

相关问题