开发中,pm要求显示指定行文字,如何做?
1.对于使用UILabel来说,可以指定numberOfLines 来设置对应的行数,通过sizeToFit
计算高度很方便。(注意:sizeToFit需要指定宽度)。
大多数情况下,解决了。问题来了,对于超过的行数,默认会显示...
.
pm不要后缀,你不能发狂~
2.解决方法也比较简单,使用CoreText 获取对应的文字,获取text可以显示多少行,以及每行有什么文字非常方便。
NSMutableAttributedString *attributeText = [[NSMutableAttributedString alloc] initWithString:@"需要输入的文字"];
//创建frameSetter,是CTFrameRef的一个工厂方法
CTFramesetterRef frameSetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attributeText);
CGMutablePathRef path = CGPathCreateMutable();
//指定每行的宽度,此处100
CGPathAddRect(path, NULL, CGRectMake(0, 0, 100, MAXFLOAT));
CTFrameRef frameRef = CTFramesetterCreateFrame(frameSetter, CFRangeMake(0, attributeText.length), path, NULL);
CFArrayRef lines = CTFrameGetLines(frameRef);
CFIndex lineCount = CFArrayGetCount(lines);
NSAttributedString *trimAttribute = nil;
for(CFIndex i;i<lineCount;i++) {
CTLineRef line = CFArrayGetValueAtIndex(lines, i);
CFRange lineRange = CTLineGetStringRange(line);
NSRange trimRange = NSMakeRange(0, lineRange.location + lineRange.length);
//获取你需要的文字
trimAttribute = [attributeText attributedSubstringFromRange:trimRange];
}
}
if(frameSetter) {
CFRelease(frameSetter);
}
if(frameRef) {
CFRelease(frameRef);
}
CGPathRelease(path);
如果需要你也可以默认加上你想加的文字。
网友评论