我正在做一个应用程序,我有3个标签。我正在使用标签自动缩小,以帮助适应标签的字体大小的设备。这些标签是紧挨着的,这意味着我希望它们的字体大小相同,但现在的情况是(因为它们的文本数量不同)它们最终缩小为不同的字体大小。有没有一种方法可以使它在缩放后,具有最小字体大小的标签是所有其他标签的标准字体。谢谢。
mwngjboj1#
动态调整大小后,可编程地更改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 }
UI标签扩展
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 } }
故事板
产出
jtw3ybtb2#
要获得最小的字体大小,可以使用compactMap,然后使用min函数在数组中查找最小的字体大小。下面是一个示例,说明如何执行此操作:
compactMap
let labels = mainContainer .arrangedSubviews .compactMap { $0 as? UILabel } let newFontsSize = labels.map { label in var fontSize = label.font.pointSize while label.isTruncated { fontSize -= 0.25 label.font = label.font.withSize(fontSize) } return fontSize } if let smallestFontSize = newFontsSize.min() { labels.forEach { label in label.font = label.font.withSize(smallestFontSize) } }
以及扩展名:
extension UILabel { var isTruncated: Bool { frame.width < intrinsicContentSize.width } }
2条答案
按热度按时间mwngjboj1#
动态调整大小后,可编程地更改UIlabel字体大小。请参见下面的示例。使用字符串和字体的长度计算当前字体大小。然后获取最小字体大小并分别应用于每个UIlabel
UI标签扩展
故事板
产出
jtw3ybtb2#
要获得最小的字体大小,可以使用
compactMap
,然后使用min函数在数组中查找最小的字体大小。下面是一个示例,说明如何执行此操作:
以及扩展名: