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
Output