文字高度错误?
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
希望对你有帮助
【讨论】:
您定义了样式但没有使用它以上是关于文字高度错误?的主要内容,如果未能解决你的问题,请参考以下文章