调用 NSAttributedString.boundingRectWithSize 时应用程序崩溃
Posted
技术标签:
【中文标题】调用 NSAttributedString.boundingRectWithSize 时应用程序崩溃【英文标题】:App crashed when invoking NSAttributedString.boundingRectWithSize 【发布时间】:2019-11-12 09:33:17 【问题描述】:我想要一个 UILabel,其中部分文本带有下划线以类似于链接。这就是我构造 NSAttributedString 的方式:
let attributedStr = NSMutableAttributedString(string: "Some description.")
let underlineText = NSAttributedString(string: "Click Here", attributes: [
NSAttributedString.Key.foregroundColor : UIColor.blue,
NSAttributedString.Key.underlineStyle: NSUnderlineStyle.single,
NSAttributedString.Key.font: UIFont.systemFont(ofSize: 14.0)])
attributedStr.append(underlineText)
let size = attributedStr.boundingRect(with: CGSize(width:CGFloat(width), height:CGFloat.greatestFiniteMagnitude), options: .usesLineFragmentOrigin, context: nil).size
应用在调用boundingRectWith
方法时崩溃:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '-[__SwiftValue _getValue:forType:]: unrecognized selector sent to instance 0x28050bed0'
为什么?我应该如何正确测量文本的大小?
【问题讨论】:
【参考方案1】:键的值 - NSAttributedString.Key.underlineStyle
应该在末尾包含 rawValue,就像这样 - NSUnderlineStyle.single.rawValue
。
你可以看到下面的代码:
let attributedStr = NSMutableAttributedString(string: "Some description.")
let underlineText = NSAttributedString(string: "Click Here", attributes: [
NSAttributedString.Key.foregroundColor : UIColor.blue,
NSAttributedString.Key.underlineStyle: NSUnderlineStyle.single.rawValue,
NSAttributedString.Key.font: UIFont.systemFont(ofSize: 14.0)])
attributedStr.append(underlineText)
【讨论】:
这就是问题所在。谢谢! 乐于助人,尽情享受!以上是关于调用 NSAttributedString.boundingRectWithSize 时应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章