确定UILabel可以容纳的最大字符数

问题描述 投票:5回答:2

给出UILabel和NSString,如何确定UILabel中可以容纳多少字符串?我正在使用Xcode-5和iOS-7。

我一直在尝试查看可以从线程Calculating UILabel Text Size中提取的内容,但那里的响应却无所适从。

ios objective-c nsstring uilabel
2个回答
5
投票

嗯,我在这里所做的工作虽然可能有另一种更有效的方式(但不太直接)。

[我所做的只是计算文本所需的rect的大小,看看它是否适合标签的框架,如果不合适,请剪下一个字符,然后重试。

@interface LTViewController ()

@property (nonatomic, weak) IBOutlet UILabel *label1;
@property (nonatomic, weak) IBOutlet UILabel *label2;

@end

@implementation LTViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    UILabel *label1 = self.label1;
    UILabel *label2 = self.label2;

    UIFont *font = label1.font;
    NSString *text = @"This is some text that will go into labels 1 and 2.";

    CGRect label1Frame = label1.frame;

    NSUInteger numberOfCharsInLabel1 = NSNotFound;

    for (int i = [text length]; i >= 0; i--) {
        NSString *substring = [text substringToIndex:i];
        NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:substring
                                                                             attributes:@{ NSFontAttributeName : font }];
        CGSize size = CGSizeMake(label1Frame.size.width, CGFLOAT_MAX);
        CGRect textFrame = [attributedText boundingRectWithSize:size
                                                        options:NSStringDrawingUsesLineFragmentOrigin
                                                        context:nil];

        if (CGRectGetHeight(textFrame) <= CGRectGetHeight(label1Frame)) {
            numberOfCharsInLabel1 = i;
            break;
        }
    }

    if (numberOfCharsInLabel1 == NSNotFound) {
        // TODO: Handle this case.
    }

    label1.text = [text substringToIndex:numberOfCharsInLabel1];
    label2.text = [text substringWithRange:NSMakeRange(numberOfCharsInLabel1, [text length] - numberOfCharsInLabel1)];
}

@end

这产生了:

“屏幕截图”“ >>

由您来处理错误情况。例如,剩下的部分不能完全放入label2中,并且可能更容易在单词中间切碎。


0
投票

这里是一个快速的解决方案:

© www.soinside.com 2019 - 2024. All rights reserved.