Setting the same font size for different labels AFTER scaling Setting the same font size for different labels AFTER scaling xcode xcode

Setting the same font size for different labels AFTER scaling


Programatically change UIlabel font size after dynamic resizing. See the example below. Calculate current font size with length of string & font. And then get minimum font size and apply separately for each 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

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    }}

Storyboard

enter image description here

Output

enter image description here