调用 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 时应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

java三种调用方式(同步调用/回调/异步调用)

LINUX系统调用

引用调用 vs 复制调用调用

RPC 调用和 HTTP 调用的区别

js方法调用

深入理解Java虚拟机——方法调用(解析调用)