如何在Swift中更改UILabel的字体而不改变字体大小?

20

我已经通过编程创建了一个标签,并将其adjustsToFitWidth设置为true。现在我想改变它的字体,但如果不使标签的字体大小保持恒定,我无法做到这一点。有人知道如何在Swift中仅更改UILabel的字体而不更改字体大小吗?


3
仅仅因为你没有改变字体大小,并不意味着两种不同字体的相同文本和相同字号将占据相同的空间。 - nhgrif
4个回答

39

为什么不获取字体大小,并使用该值指定新字体?

let fontSize = self.label.font.pointSize;
self.label.font = UIFont(name: "HelveticaNeue", size: fontSize)

6
你可以像这样做:
label.font = UIFont(name: "Arial", size: label.font.pointSize)

这将使用相同的字体大小,“Arial”可以是您想选择的任何字体系列。


4

一份更好的答案。

UILabel子类化:添加一个空的swift文件,并将其命名为例如EZLabel。添加以下代码。

import Foundation
import UIKit

class EZLabel: UILabel {

    override func awakeFromNib() {
        super.awakeFromNib()
        changeFontName()
    }

    func changeFontName()
    {
        self.font = UIFont(name: "Roboto", size: self.font.pointSize)
    }
}

优点是,如果需要的话,您不需要在整个项目中更改每个UILabel的字体。

1
extension UILabel {
    override open func awakeFromNib() {
        super.awakeFromNib()
        changeFontName()
    }

    func changeFontName()
    {
        self.font = UIFont(name: "YOUR_FONT_NAME", size: self.font.pointSize)
    }
}

/* Do this also for buttons and any uiviews */

首先,创建一个Swift文件,然后将上述代码放在导入UIKIt部分而不是Foundation的文件中,之后运行您的应用程序,所有标签都将采用您刚刚设置的字体。 - Ahmed Samir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接