ios - 如何计算标签的最后一行宽度?

标签 ios swift label uilabel

private func getLasLineWidth() -> CGFloat {

    let message = NSAttributedString(string: self.text!,
                                     attributes: [.font: self.font!])

    let labelWidth = self.bounds.width
    // Create instances of NSLayoutManager, NSTextContainer and NSTextStorage
    let labelSize = CGSize(width: labelWidth, height: .infinity)
    let layoutManager = NSLayoutManager()
    let textContainer = NSTextContainer(size: labelSize)
    let textStorage = NSTextStorage(attributedString: message)

    // Configure layoutManager and textStorage
     layoutManager.addTextContainer(textContainer)
    textStorage.addLayoutManager(layoutManager)

    // Configure textContainer
    textContainer.lineFragmentPadding = 0.0
    textContainer.lineBreakMode = .byWordWrapping
    textContainer.maximumNumberOfLines = 0

    let lastGlyphIndex = layoutManager.glyphIndexForCharacter(at: message.length - 1)
    let lastLineFragmentRect = layoutManager.lineFragmentUsedRect(forGlyphAt: lastGlyphIndex,
                                                                  effectiveRange: nil)

    return lastLineFragmentRect.maxX
}

我试过这行代码,但它不适用于方向景观。我该如何解决这个问题?有人遇到过这个问题吗?

最佳答案

问题似乎是因为您的 getLasLineWidth() 函数没有考虑您正在设置的段落样式。

可能可以通过更改以下内容来解决问题:

func getLasLineWidth() -> CGFloat {

    let message = NSAttributedString(string: self.text!,
                                     attributes: [.font: self.font!])

为此:

func getLasLineWidth() -> CGFloat {

    guard let message = self.attributedText else { return CGFloat.zero }

我只做了一些快速测试,但看起来应该可以。

关于ios - 如何计算标签的最后一行宽度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57051804/

相关文章:

wolfram-mathematica - 如何在Mathematica中标记不同的曲线?

带标签的 Python Tkinter TTK 分隔符

json - 将 UISearchController 与 swift 中的异步结果更新集成

Javascript:获取标签中具有特定 "for"的单选按钮标签

ios - 使用 Cocoapods 一个目标多个平台

iphone - MKCoordinateSpan 以米为单位?

macos - 在 mac OS X 中为 Swift 绑定(bind) : Invalid command `rl_complete' .

swift - 在 Swift 中,什么是 DictionaryLiteralConvertible?

ios - 使用 CloudKit 共享私有(private)数据

iphone - 将数据加载到 TextView 字段中时出现奇怪问题