无论如何我可以获得 UILabel 文本的截断版本?
简而言之,我有一段文本和两个 UILabels
- 标签 A,长 2 行,标签 B,高度可变。标签 A 位于标签 B 之上。想法是标签 A 显示文本段落的前两行,并且根据特定的用户操作,标签 B 因为可见并显示文本的其余部分。
我无法确定标签 B 中应该包含什么,因为我不知道标签 A 中显示的是什么。我还需要从标签 A 中删除“...”。
注意:我意识到这有点令人费解,但有一些很好的理由,我不会用这些来混淆问题。
最佳答案
我想知道您是否可以使用 NSString UIKit Additions 中的方法计算出多少适合标签 A。
粗略的方法可能是从文本的第一个字符开始并测试它将占用的大小(-sizeWithFont:forWidth:lineBreakMode:
也许吧?)然后继续添加字符一次,直到它不再适合您的标签 A。
我希望其他人可以想出更好的方法来做到这一点,但上面的方法应该可行。
更新
昨晚我研究了一下我自己应用程序的 Core Text,发现了 CTFramesetterSuggestFrameSizeWithConstraints
.通过查看该函数中的 fitRange
,您也许可以使用它来确定有多少字符串适合标签。
更新 2:
我认为这应该可行,但我刚刚在这里输入了这个,所以它甚至可能无法编译:
UIFont *uiFont = [UIFont systemFontOfZise:13.0f]; // whichever font you're using
CTFontRef ctFont = CTFontCreateWithName((CFStringRef)uiFont.fontName, uiFont.pointSize, NULL);
NSDictionary *attr = [NSDictionary dictionaryWithObject:(id)ctFont forKey:(id)kCTFontAttributeName];
CFRelease(ctfont);
NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:yourLabelText attributes:attr];
CTFrameSetterRef frameSetter = CTFrameSetterCreateWithAttributedString((CFAttributedStringRef)attrString);
[attrString release];
CFRange fitRange;
CTFrameSetterSuggestFrameSizeWithConstrains(
frameSetter,
CFRangeMake(0, 0),
NULL,
CGSizeMake(labelWidth, labelHeight),
&fitRange);
CFRelease(frameSetter);
CFIndex numberOfCharactersThatFit = fitRange.length;
关于iphone - 从 UILabel 获取截断的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6728259/