当一个Label adjustFontSizeToFitWidth

时间:2018-01-23 10:12:27

标签: ios swift uitableview uilabel

我在自定义UILabel中有两个tableViewCell。一个标签具有宽度约束,并且在较小的屏幕上设置为adjustFontSizeToFitWidth,例如5S。当它没有特定的宽度限制时,如何让其他UILabel与第一个标签的字体大小相匹配?

似乎sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:在iOS7中已弃用,那么什么是Swift解决方案?

这个答案When do adjustsFontSizeToFitWidth or boundingRectWithSize change the context.actualScaleFactor?不完整,我需要在TableViewCell中进行此操作。

这是我在自定义表视图单元类中的内容。但它只是拾取原始尺寸而不是调整后的尺寸。

class CustomTVC: UITableViewCell {

@IBOutlet weak var rowTitle: UILabel!
@IBOutlet weak var rowSubtitle: UILabel!

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

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // makes the rowSubtitle and title have matching fonts in case of 5S
    let attributes = [NSAttributedStringKey.font: rowTitle.font]
    let textString = rowTitle.text
    let attributedString = NSMutableAttributedString(string:textString!, attributes:attributes)

    let context = NSStringDrawingContext()
    context.minimumScaleFactor = rowTitle.minimumScaleFactor
    let resultingRect = attributedString.boundingRect(with: rowTitle.bounds.size, options: .usesLineFragmentOrigin, context:context)

    print("actual context after drawing: \(context.actualScaleFactor)")

    let actualFontSize = rowTitle.font.pointSize * context.actualScaleFactor
    print("actual font size is: \(actualFontSize)")
}
}

1 个答案:

答案 0 :(得分:-1)

这个解决方法我能想到的一切。希望有人会发布更好的方法来实际使用adjustSizeToFitWidth。

let ScreenWidth = UIScreen.main.bounds.size.width
    var font = UIFont()
    if ScreenWidth < 321 {
        font = UIFont.systemFont(ofSize: 16, weight: .light)
    } else {
        font = UIFont.systemFont(ofSize: 19, weight: .light)
    }
    rowTitle.font = font
    rowSubtitle.font = font