有没有办法在 UILabel 中为 NSRange 获取 CGRects?

Posted

技术标签:

【中文标题】有没有办法在 UILabel 中为 NSRange 获取 CGRects?【英文标题】:Is there any way to get CGRects for NSRange in UILabel? 【发布时间】:2013-09-01 17:50:03 【问题描述】:

我有一个带有 NSAttribtuedString 的 UILabel,需要在字符串中找到与某个 NSRange 对应的所有 CGRect。有什么简单的方法可以做到这一点吗?

我正在寻找这个,因为我打算像这样在标签上覆盖突出显示视图:

我知道 UITextView 更适合这个,因为它实现了 UITextInput 协议(它具有我需要的所有方法),但由于 ios 中的一个错误,我仅限于 UILabel。

我一直在寻找解决方案但没有成功。 This gist 对我不起作用,我还没有找到任何 UILabel 子类可以实现任何对我有帮助的方法。

有什么建议吗? 皮特。

【问题讨论】:

你可能会更幸运地找到一个解决这个问题的方法,让它在 UILabel 中工作。 ios7这个bug还存在吗? 我想你是对的。此外,该错误已在 iOS 7 中修复。它与 line spacing when using custom font 有关。我的解决方案是使用多行 UILabel(不受它影响)而不是错误的 UITextView。我想我必须寻找另一种方法来让它在 iOS 6 上运行...... 【参考方案1】:

UILabel 没有任何方法可以从范围中查找 rect。您可以使用 UITextView (将 UITextView 可编辑属性设置为 NO) 来完成。 UITextview 实现了 UITextInput 协议。您可以使用 UITextInput 协议方法从范围中获取 rect

【讨论】:

是的,已经知道了。但由于 iOS 6 上的行高错误,我无法使用 UITextView

以上是关于有没有办法在 UILabel 中为 NSRange 获取 CGRects?的主要内容,如果未能解决你的问题,请参考以下文章

借助 NSRange 在子字符串上创建 UIButton

UILabel 在 cellForRowAtIndexPath 中为零

如何在情节提要中为uilabel设置大于300的字体大小?

你在哪里以编程方式在 UIView 中为 UILabel 设置文本?

在 IB 中为 UILabel 设置 HTML 文本

如何在 swift 中为 UILabel 中的递增数字设置动画