确定UILabel可以使用的最大字符数
给定一个UILabel和一个NSString,我该如何确定在UILabel中可以容纳多lessstring? 我正在使用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
这产生:
这是由你来处理错误的条件。 例如,其余的并不完全符合label2,它可能会更频繁地在一个词的中间被切断。