在我的项目中有一个特定的要求,当UILabel
的文本被截断时,我需要提供更多功能。最初将给出CGRect
。因此,我们需要显示标签,如果文本被截断,我们需要在标签的末尾 ...应显示更多文本。点击 ...查看更多查看更多内容我需要让我的标签更大。所以我在做
NSMutableString *truncatedString = [text mutableCopy];
[truncatedString appendString:ellipsis];
NSRange range = NSMakeRange(truncatedString.length - (ellipsis.length + 1), 1);
do {
[truncatedString deleteCharactersInRange:range];
range.location--;
[self setText:truncatedString];
} while ([self isTextTruncated]);
它适用于较小的文本,因为我将它用于UITableViewCell
。由于上述操作每次都发生,因此对于较大的文本来说是滞后的。所以我想知道UILabel
中采用的文本,以便我可以使用新文本进行任何操作。任何帮助将不胜感激。
编辑: 我有一个标签和更大的文字。说我的文字是
“Apple Inc.是一家美国跨国公司,总部位于加利福尼亚州库比蒂诺,负责设计,开发和销售消费电子产品,计算机软件,在线服务和个人电脑。”如果我的标签只采用“Apple Inc.是一家美国跨国公司......”我只需要这个文本答案 0 :(得分:3)
使用此方法计算文本适合所提供的height
所需的UILabel
:
- (CGFloat)getLabelHeight:(UILabel*)label
{
CGSize constraint = CGSizeMake(label.frame.size.width, 20000.0f);
CGSize size;
NSStringDrawingContext *context = [[NSStringDrawingContext alloc] init];
CGSize boundingBox = [yourString boundingRectWithSize:constraint
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName:label.font}
context:context].size;
size = CGSizeMake(ceil(boundingBox.width), ceil(boundingBox.height));
return size.height;
}
将返回的高度与标签的高度进行比较:
CGFloat heightRequired = [self getLabelHeight:myLabel];
if(myLabel.frame.size.height < heightRequired) {
//you need to show more because the text is more than the label width and height.
}
else {
//you don't need to show more because the text is not more than the label width and height.
}
编辑:比较高度的目的是检查框架是否足以显示文字。因此,即使您想增加标签的宽度以显示更多文本,它也会为您提供所需的结果。
答案 1 :(得分:0)
您需要计算文本大小,如果返回的大小大于文本字段大小,则需要显示...查看更多
CGSize requiredSize = [text sizeWithFont:withFont constrainedToSize:textViewSize lineBreakMode:lineBreakMode];
答案 2 :(得分:0)
如果您没有找到答案,我建议您使用此解决方法:
尝试使用已知长度的文本,获取标签所适合的最大字符数,并使用该值执行以下操作:
int maxNumOfChar = 15; //For example
if (text.length > maxNumOfChar){
NSString* viewMore = @"...View More";
text = [[text substringToIndex:maxNumOfChar - [viewMore length]] stringByAppendingString: viewMore];
}