Swift 4 in Xcode 9 - 如何在 NSAttributedstring 中使用 boundingrect?
Swift 4 in Xcode 9 - How to use boundingrect in NSAttributedstring?
我想获取UILabel中一些文本的长度,动态改变UILabel的宽度属性
但是我不知道如何在函数boundingrect中设置参数。
这是Apple Developer的文档。
func boundingRect(with size: CGSize,
options: NSStringDrawingOptions = [],
context: NSStringDrawingContext?) -> CGRect
,我试过这样
let attr = NSMutableAttributedString(string: "test test test test , this is test text. test test test test , this is test text. test test test test , this is test text. ")
//attr.addattributes
print(attr.boundingrect(with: CGSize(width: CGFloat.greatestFiniteMagnitude, height: 0), option: .truncatesLastVisibleLine
,context: nil)!)
但最后我在打印时得到了错误的宽度,那么为什么以及如何得到正确的宽度。
使用
public extension NSAttributedString {
public func width(height: CGFloat) -> CGFloat {
let constraintRect = CGSize(width: .greatestFiniteMagnitude, height: height)
let boundingBox = self.boundingRect(with: constraintRect,
options: [.usesLineFragmentOrigin, .usesFontLeading],
context: nil)
return ceil(boundingBox.height)
}
}
然后得到 let width = attr.width(height: height)
身高 > 0
我想获取UILabel中一些文本的长度,动态改变UILabel的宽度属性
但是我不知道如何在函数boundingrect中设置参数。 这是Apple Developer的文档。
func boundingRect(with size: CGSize,
options: NSStringDrawingOptions = [],
context: NSStringDrawingContext?) -> CGRect
,我试过这样
let attr = NSMutableAttributedString(string: "test test test test , this is test text. test test test test , this is test text. test test test test , this is test text. ")
//attr.addattributes
print(attr.boundingrect(with: CGSize(width: CGFloat.greatestFiniteMagnitude, height: 0), option: .truncatesLastVisibleLine
,context: nil)!)
但最后我在打印时得到了错误的宽度,那么为什么以及如何得到正确的宽度。
使用
public extension NSAttributedString {
public func width(height: CGFloat) -> CGFloat {
let constraintRect = CGSize(width: .greatestFiniteMagnitude, height: height)
let boundingBox = self.boundingRect(with: constraintRect,
options: [.usesLineFragmentOrigin, .usesFontLeading],
context: nil)
return ceil(boundingBox.height)
}
}
然后得到 let width = attr.width(height: height) 身高 > 0