gpt4 book ai didi

iphone - 从 UILabel 获取截断的文本

转载 作者:太空狗 更新时间:2023-10-30 03:49:40 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com