在视图重新出现之前,UILabel的字体不会调整

时间:2017-06-27 14:39:36

标签: swift xcode uitableview uifont

使用故事板我创建了一个带有标签的单元格的表格视图。

我希望能够轻松地为我的应用程序中的所有标签指定相同的字体,因此我在帮助文件(smallFont,mediumFont和largeFont)中创建了一些字体,并在tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)中设置了每个标签以供使用我想要的字体(即cell.label.font = Common.fonts.mediumFont)。

tableview第一次显示它是使用故事板中定义的字体,它不使用我编写的字体,直到你离开视图并返回。

我可以通过更改故事板来消除视觉大小调整以使用我以编程方式放置的相同字体,但我希望能够通过调整公共文件中的字体来更改整个应用程序中的字体。

如何在视图首次出现时覆盖故事板的字体并强制它使用编程的字体?

编辑:添加更多信息。

当我滚动表格时,标签字体会从故事板大小变为编程字体。

6 个答案:

答案 0 :(得分:2)

我已通过设置cellForRowAtIndexPathwillDisplayCell方法中的字体来修复它。

willDisplayCell以这种方式实现:

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, 
               forRowAt indexPath: IndexPath) {
    // e.g.
    let myCell = cell as! MyCustomCell
    myCell.label.font = UIFont.boldSystemFont(ofSize: 17.0)
}

注意:该字体在cell方法的willDisplayCell输入参数上设置,如上面的代码所示。如果使用tableViewtableView.dequeueReusableCell(...)获取单元格,则无法使用。

答案 1 :(得分:1)

您是否尝试从细胞类中修改awakeFromNib中的字体?

以下是一个示例:

if($1 in contained);else{print "Here goes your code for \"not in\""}

Noteworth font in storyboard, Appleberry font applied at runtime

通常,awakeFromNib用于执行其他初始化。

答案 2 :(得分:0)

首先,通过创建字体来替换您的常用方法。我想不出任何不起作用的情况。

label.font = UIFont.systemFontOfSize(20)

假设这有效,请使用断点来调试原始代码。您需要确保在第一次执行testFont行并使用有效的非零值。

let testFont = Common.fonts.mediumFont
label.font = testFont

答案 3 :(得分:0)

嗯,你可以试试prepareForReuse(),这个函数用来执行一些最后的修改或重置:

override func prepareForReuse() {
    super.prepareForReuse()
    titleLabel.font = Common().appleBerryFont(size: 28.0)
}

答案 4 :(得分:0)

另一种技术 - 子类UILabel并在那里设置字体。在需要的情况下在故事板中使用该标签。例如:

import UIKit
class StandardLabel: UILabel {

    override init(frame: CGRect) {
        super.init(frame: frame)
        commonInit()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        commonInit()
    }

    func commonInit(){
        self.font = Common.fonts.mediumFont
    }
}

然后在您的故事板中,将您的标签类更改为StandardLabel。

答案 5 :(得分:0)

在自定义标签中,您应该覆盖

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
        super.traitCollectionDidChange(previousTraitCollection)
}

并在那里更改字体