目标C:编写一个函数来返回UILabel中最后一个字符的位置?

Posted

技术标签:

【中文标题】目标C:编写一个函数来返回UILabel中最后一个字符的位置?【英文标题】:Objective C: Write a function to return the position of the last character in a UILabel? 【发布时间】:2009-12-27 03:28:13 【问题描述】:

UILabel 的文本在 CGRect(x,y,size,width) 中绘制。标签可以有多行文本。

是否可以编写一个函数来返回这个矩形内的一个 CGPoint 来指定最后一个字符的位置?

我问是因为我试图将 UILabel 的文本包装在任意前缀和后缀中。前缀/后缀需要是单独的标签,以便我可以设置它们的字体、颜色等。找到文本的开头很容易,但至少对我来说,找到文本的结尾很棘手。

【问题讨论】:

How do I locate the CGRect for a substring of text in a UILabel?的可能重复 【参考方案1】:

也许 UIWebView 可以解决问题。用[webview LoadhtmlString:@"<b>prefix/b>text<b>suffix</b>" baseURL:nil] 填充它。这有点像大锤式的解决方案,但您显然会得到很多其他好处。

【讨论】:

感谢您跳出思维定势。 UIWebView 速度慢且不可靠。再加上它像一艘沉没的船一样泄漏。 @NathanielSymer:没有任何宗教异议,最终证明手段是正当的。【参考方案2】:

在 iPhone 上测量文本的主要方法是使用 NSString 的 sizeWithFont:forWidth:lineBreakMode。可以在此基础上做你想做的事,但这需要一些工作。首先,使用您指定的文本特征测量前缀并记住尺寸。然后,计算分词并逐步添加每个单词的测量宽度,必要时换行。最后,测量您的后缀并在您计算的矩形中绘制所有内容。

【讨论】:

【参考方案3】:

正如 sbooth 提到的,您可以使用以下内容来获取文本 rect:

UILabel *label = [UILabel new]; // Or whatever the label happens to be...
CGSize constraintSize = CGSizeMake(label.frame.size.with-10, MAXFLOAT); // 10 is the total size of the margins. 
// Replace the 10 with 40 for UITableView usage because of the other subviews
CGSize labelSize = [label.text sizeWithFont:label.font constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];

要获得最后一个字符的点,只需隔离最后一行并获取它的矩形。

X:获取最后一行的矩形并减去 0.5*(最后一个字符的宽度) Y:0.5*labelSize.height

【讨论】:

以上是关于目标C:编写一个函数来返回UILabel中最后一个字符的位置?的主要内容,如果未能解决你的问题,请参考以下文章

C语言高手来帮忙吧!!编写函数,求一个整型数组的第一个偶数的下标和最后一个偶数的下标。

谁能用c语言写一个钩子函数的例子

当字符长度发生变化时,保持 UILabel 在 UIView 中居中。 iOS,目标 C

从 rootViewController 设置 UILabel 文本

使用 c 编程进行二分搜索

C语言 题目 编写一个函数,完成将一个字符串中的字符逆序输出,即最后一个先输出,第1个最后输出