lea*_*ner 5 objective-c nsstring uilabel ios
给定UILabel和NSString,如何确定UILabel中可以容纳多少字符串?我正在使用Xcode-5和iOS-7.
我一直试图看看我可以从线程计算UILabel文本大小中提取什么,但我没有得到任何响应那里.
好吧,我在这里所做的工作虽然可能有另一种更有效(但不那么直接)的方式.
我所做的只是计算文本所需的矩形大小,看它是否适合标签的框架,如果没有,则剪掉一个角色然后再试一次.
@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
Run Code Online (Sandbox Code Playgroud)
这会产生:

由您来处理错误情况.例如,其余部分并不完全适合label2,它可能会更频繁地切入一个单词的中间而不是.