文字高度错误?

Posted

技术标签:

【中文标题】文字高度错误?【英文标题】:Getting wrong text height? 【发布时间】:2017-03-09 12:22:19 【问题描述】:

我使用下面的代码来确定文本的高度,它适用于小文本,但如果文本很大,它会给我错误的高度(文本视图底部的空间太大)如何解决这个问题。

    let textView = UITextView (frame: CGRectMake(0,0,maxWidth, 10))
    textView.font = font
    textView.text = text
    //textView.textContainerInset = UIEdgeInsetsZero

    let fixedWidth = textView.frame.size.width
    let newSize = textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max))
    var newFrame = textView.frame
    newFrame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height)
    textView.frame = newFrame;
    return textView.frame.height

【问题讨论】:

你的限制在哪里? 试试 textView.contentSize.height 无限制,我在尝试提前找出文字的高度。 我-希望-认为 this answer 应该对您的情况有用。 代码被调用时fixedWidth可以为零吗? 【参考方案1】:

这将是您在 textview 中的文本高度。

let textView = UITextView (frame: CGRectMake(0,0,maxWidth, 10))
textView.font = font
textView.text = text

let height = textView.conentSize.height

【讨论】:

【参考方案2】:

在字符串上使用扩展

extension String 
    func height(withConstrainedWidth width: CGFloat, font: UIFont) -> CGFloat 
        let constraintRect = CGSize(width: width, height: .greatestFiniteMagnitude)
        let boundingBox = boundingRect(with: constraintRect, options: .usesLineFragmentOrigin, attributes: [NSFontAttributeName: font], context: nil)

        return boundingBox.height
    

还有 NSAttributedString(有时非常有用)

extension NSAttributedString 
    func height(withConstrainedWidth width: CGFloat) -> CGFloat 
        let constraintRect = CGSize(width: width, height: .greatestFiniteMagnitude)
        let boundingBox = boundingRect(with: constraintRect, options: .usesLineFragmentOrigin, context: nil)

        return boundingBox.height
    

    func width(withConstrainedHeight height: CGFloat) -> CGFloat 
        let constraintRect = CGSize(width: .greatestFiniteMagnitude, height: height)
        let boundingBox = boundingRect(with: constraintRect, options: .usesLineFragmentOrigin, context: nil)

        return boundingBox.width
    

【讨论】:

【参考方案3】:

试试这个方法

static func neededHeigthForText(text:String,font:UIFont,maxWidth:CGFloat) ->CGFloat

    let options : NSStringDrawingOptions = [.usesLineFragmentOrigin,.usesFontLeading]
    let style : NSMutableParagraphStyle = NSMutableParagraphStyle()
    style.lineBreakMode = .byWordWrapping

    let textAttributes = [NSFontAttributeName:font]

    let size = NSString(string: text).boundingRect(with: CGSize(width: maxWidth, height: CGFloat.greatestFiniteMagnitude) , options: options, attributes: textAttributes, context: nil).size

    return size.height

希望对你有帮助

【讨论】:

您定义了样式但没有使用它

以上是关于文字高度错误?的主要内容,如果未能解决你的问题,请参考以下文章

Word文字中嵌套的图片向上突出,与文字的高度不一致

css中文字能够撑开高度吗

iOS UITextView 高度随文字自己主动添加,并尾随键盘移动

Libgdx 标签多行文字高度

高度剩余法

泰山OFFICE技术讲座:文字边框高度研究