iphone - 从 UILabel 获取截断的文本

标签 iphone objective-c uilabel

无论如何我可以获得 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/

相关文章:

ios - Xcode,目标类模板缺少SKScene的子类

objective-c - cocoa keyDown 事件不调用

iOS NSKeyedUnarchiver 无法获得正确的值

xcode - 如何像这样的 InterfaceBuilder 设置自动调整标签大小?

ios - 使 UILabel 的文本加粗

ios - 不兼容的指针类型从NSString分配给“UITextField”

ios - "Could not find Developer Disk Image"运行错误

iphone - Objective C 应用程序中的恒定、随机和莫名其妙(对我来说,无论如何)EXC BAD ACCESS

iphone - 如何使用Core Data有效保存UI/主线程中所做的更改?

ios - 向 UICollectionView 的第一个和最后一个单元格添加填充