标签可以采用多少文本

时间:2014-08-25 07:34:07

标签: ios iphone

在我的项目中有一个特定的要求,当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.是一家美国跨国公司......”我只需要这个文本

3 个答案:

答案 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];
}
相关问题