使用Swift中的Word Wrapping自动调整Multiline UILabel

时间:2017-07-05 00:03:48

标签: swift uilabel multiline word-wrap autosize

我有一个UILabels的集合视图,它受限于容器单元格的宽度和高度。每个UILabel都有可自定义的文本。 我希望这个文本缩小和自动换行,以便以尽可能大的尺寸拟合文本。我已经尝试过许多线程,在objc中读取解决方案,但没有任何作用。我无法弄清楚这一点。我们在这里看到的只是Truncate Tail的最小字体大小,它应该起作用,但是它会继续被削减,我无法弄清楚原因。

任何人都有一些提示给我?我已经尝试了一些编程解决方案,但到目前为止还没有任何工作。

这就是我得到的:

What I am getting

这就是我想要的:

What I want

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。我为UILabel创建了扩展程序来处理该问题。 您可以尝试使其适应您的需求。

// quasar.conf.js
devServer: {
  https: {
      key: fs.readFileSync('/path/to/server.key'),
      cert: fs.readFileSync('/path/to/server.crt'),
      ca: fs.readFileSync('/path/to/ca.pem'),
  }
}

但是,当您在标签上调用func adjustFontSizeToWidth() { enum Constants { static let fontDecrement: CGFloat = 1.0 static let minimumFontSize: CGFloat = 6.0 } var characterSet = CharacterSet.whitespacesAndNewlines characterSet.insert(charactersIn: "-") let words = text?.components(separatedBy: characterSet) var largestWord = "" var largestWordWidth: CGFloat = 0 words?.forEach { word in let wordSize = (word as NSString).size(withAttributes: [NSAttributedString.Key.font: font]) let wordWidth = wordSize.width if wordWidth > largestWordWidth { largestWordWidth = wordWidth largestWord = word } } while largestWordWidth > bounds.width && font.pointSize > Constants.minimumFontSize { font = font.withSize(font.pointSize - Constants.fontDecrement) let largestWordSize = (largestWord as NSString).size(withAttributes: [NSAttributedString.Key.font: font]) largestWordWidth = largestWordSize.width } } 时,请确保标签具有正确的边界。例如,您可以覆盖adjustFontSizeToWidth()

答案 1 :(得分:-1)

这可能适合你

var label = UILabel()
label.text = "Harvard Hills" // "Willis 7", "Arbs"
label.numberOfLines = 2
label.lineBreakMode = .byWordWrapping
label.minimumScaleFactor = 0.6 . // Important - set minimum scale factor

// Now an answer to your question
let numOflines = label.numberOfLines

现在,使用视图控制器中的layoutSubviewslayoutIfNeeded刷新标签,并使用行数缩小字体大小。

if numOflines > 1 {
     label.font = // reduce font size (by 4 or 8 points)
}

这是结果(我在那里创建了可设计的标签和设置条件):

enter image description here