UILabel获取CGRect以获取文本的子字符串

时间:2011-07-24 19:00:02

标签: objective-c ios uilabel

我的目标很简单:从UILabel获取标签文本中子字符串的矩形。从广泛的搜索来看,似乎没有内置任何东西来处理这个问题。其他人也提出了类似的问题,但是没有人在Stackoverflow上完全回答。

// Something like this perhaps (added as a category)
CGRect rect = [myLabel rectForRange:NSMakeRange(3, 5)];

它可以用于什么的一个例子(只是为了澄清我正在搜索的内容):

example of rect

2 个答案:

答案 0 :(得分:7)

这对于一个角色来说主要是需要的,所以我疯了,写了一些代码,可以准确地计算出最基本的UILabel的矩形。标准UILineBreakMode和文本对齐。

我希望如果我将它发布给公众,那么代码会对它做出贡献并改进它,特别是因为我对文本渲染知之甚少!

代码:

https://gist.github.com/1278483

答案 1 :(得分:2)

你是对的:这不是UILabel的内置部分。

如果您真的需要这个,UILabel的子类,请使用CoreText来实现-drawRect:,您将能够compute the rect for a range via CTLineGetOffsetForStringIndex(), CTFrameGetLineOrigins(), and CTLineGetTypographicBounds()。如果范围中的文本被布置为穿过换行符,则会变得复杂;你可能想要多个职位。