【问题标题】:Setting the same font size for different labels AFTER scaling缩放后为不同标签设置相同的字体大小
【发布时间】:2018-09-06 06:01:50
【问题描述】:

我正在制作一个有 3 个标签的应用。我正在使用标签自动收缩来帮助调整标签的字体大小以适应设备。

这些标签彼此相邻,因此意味着我希望它们具有相同的字体大小。目前发生的情况是(因为它们有不同数量的文本)它们最终会缩小为不同的字体大小。

有没有办法让缩放后,字体最小的标签成为所有其他标签的标准字体。

谢谢。

【问题讨论】:

标签: ios swift xcode uilabel autoshrink


【解决方案1】:

动态调整大小后以编程方式更改 UIlabel 字体大小。请参见下面的示例。用字符串和字体的长度计算当前字体大小。然后获取最小字体大小,分别为每个UILabel申请

override func viewWillAppear(_ animated: Bool) {
    let fontSize1 = self.label1.getFontSizeForLabel()
    let fontSize2 = self.label2.getFontSizeForLabel()
    let fontSize3 = self.label3.getFontSizeForLabel()

    let smallestFontSize = min(min(fontSize1, fontSize2), fontSize3)

    self.label1.font = self.label1.font.withSize(smallestFontSize)
    self.label2.font = self.label2.font.withSize(smallestFontSize)
    self.label3.font = self.label3.font.withSize(smallestFontSize)

    self.label1.adjustsFontSizeToFitWidth = false
    self.label2.adjustsFontSizeToFitWidth = false
    self.label3.adjustsFontSizeToFitWidth = false
}

UILabel 扩展

extension UILabel {
    func getFontSizeForLabel() -> CGFloat {
        let text: NSMutableAttributedString = NSMutableAttributedString(attributedString: self.attributedText!)
        text.setAttributes([NSAttributedStringKey.font: self.font], range: NSMakeRange(0, text.length))
        let context: NSStringDrawingContext = NSStringDrawingContext()
        context.minimumScaleFactor = self.minimumScaleFactor
        text.boundingRect(with: self.frame.size, options: NSStringDrawingOptions.usesLineFragmentOrigin, context: context)
        let adjustedFontSize: CGFloat = self.font.pointSize * context.actualScaleFactor
        return adjustedFontSize
    }
}

故事板

输出

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-15
    • 2015-10-29
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    • 2017-11-01
    相关资源
    最近更新 更多