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

Iphone 目标C:编写函数返回UILabel中最后一个字符的位置?,iphone,objective-c,cocoa-touch,uikit,Iphone,Objective C,Cocoa Touch,Uikit,UILabel的文本以CGRect(x、y、大小、宽度)绘制。标签可以有多行文本 是否可以编写一个函数来返回此矩形内指定最后一个字符位置的CGPoint 我这样问是因为我试图用任意前缀和后缀来包装UILabel的文本。前缀/后缀需要是单独的标签,以便我可以设置它们的字体、颜色等。找到文本的开头很容易,但找到文本的结尾至少对我来说很棘手。也许UIWebView可以做到这一点。用[webview LoadHTMLString:@“prefix/b>textsuffix”baseURL:nil]填充它

UILabel的文本以CGRect(x、y、大小、宽度)绘制。标签可以有多行文本

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


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

也许UIWebView可以做到这一点。用
[webview LoadHTMLString:@“prefix/b>textsuffix”baseURL:nil]填充它
。这有点像一个大锤式的解决方案,但很明显,你会得到很多其他的好处。

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

正如sbooth所述,您可以使用以下方法获得文本矩形:

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:获取最后一行的rect并减去0.5*(最后一个字符的宽度)

Y:0.5*标签大小。高度

感谢您跳出我的框框思考。UIWebView速度慢且不可靠。加上它像一艘破船一样泄漏。@NathanielSymer:没有任何宗教反对,目的证明了手段的正当性。可能是