UILabel中的不同文本在UICollectionView单元格中保持相同的字体大小

时间:2018-08-09 19:42:33

标签: ios autolayout uilabel uicollectionviewcell

例如

  1. 我有4个UICollectionView的itemInSection,根据设备大小,它们的高度和宽度相同。
  2. 对于单元格内部的UILabel,将其乘以单元格的1:3使其宽度和高度相等。我希望UILabel大小在屏幕大小更改时增加或缩小。
  3. UILabel中每个单元格的文本都不同,例如“笔”,“文档”,“李”和“节拍”
  4. 我设置fontSize = 22pt,minimumScaleFactor为0.5,并且AdjustsFontSizeToFitWidth为true
  5. 但是问题是“文档”将是最小的字体大小,所有其他文本字体看起来都比它大得多。

问题:如何使所有UILabel文本大小与最长文本相同,并且同时使字体大小根据屏幕大小缩小或增大?

例如。 iPhone 8 Plus字体大小应大于iPhone SE字体大小,因为我们在iPhone 8 Plus上有更多的空间。

iPhone SE screenshot

1 个答案:

答案 0 :(得分:0)

您可以使用以下方法检查哪个标签的字符数最多:

label.text.count

一旦知道最长的,就可以使用简单的扩展名,例如:

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

将其他标签的字体大小固定到最长标签的字体大小。