UILable的sizeToFit方法很不错,可以直接通过调用它改变label的frame
//
// ViewController.m
// SizeToFitsAndSizeThatFits
//
// Created by WeiZhen_Liu on 13-7-24.
//
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
UILabel *label_1 = [[UILabel alloc] initWithFrame:CGRectMake(20, 20, 0, 0)];
[label_1 setFont:[UIFont systemFontOfSize:20.0f]];
label_1.text = @"hello World!";
CGSize sizeThatFits = [label_1 sizeThatFits:CGSizeZero];
NSLog(@"1--> %f %f ", sizeThatFits.width, sizeThatFits.height);
// 1--> 106.000000 24.000000
NSLog(@"2--> %f %f", label_1.frame.size.width, label_1.frame.size.height);
// 2--> 0.000000 0.000000
// 说明sizeThatSize并没有改变原始label的大小
// 下面这样搞就直接改变了这个label的宽和高:
[label_1 sizeToFit];
NSLog(@"3--> %f %f", label_1.frame.size.width, label_1.frame.size.height);
// 3--> 106.000000 24.000000
[self.view addSubview:label_1];
[label_1 release];
// ---------------------------------------------------------------------------
UILabel *label_2 = [[UILabel alloc] initWithFrame:CGRectMake(20, 80, 280, 0)];
// 宽度必湏要设置
label_2.font = [UIFont systemFontOfSize:15.0f];
label_2.numberOfLines = 0;
label_2.text = @"Hello World! Hello China! Hello HeNan! Hello ShangQiu! Hello YuCheng! Hello DaHou! Hello HeiLiu!";
CGSize sizeThatFits_2 = [label_2 sizeThatFits:CGSizeZero];
NSLog(@"4--> %f %f", sizeThatFits_2.width, sizeThatFits_2.height);
// 667.000000 19.000000
// sizeThatFits 是按一行算的
NSLog(@"5--> %f %f", label_2.frame.size.width, label_2.frame.size.height);
// 280.000000 0.000000
[label_2 sizeToFit];
NSLog(@"6--> %f %f", label_2.frame.size.width, label_2.frame.size.height);
// 266.000000 57.000000
// 之所以宽度是 266, 是因为默认label的lineBreakMode是NSLineBreakByWordWrapping
CGSize size = [label_2.text sizeWithFont:[UIFont systemFontOfSize:15.0f]
constrainedToSize:CGSizeMake(280, MAXFLOAT)];
NSLog(@"7--> %f %f", size.width, size.height);
// 7--> 266.000000 57.000000
[self.view addSubview:label_2];
[label_2 release];
// ---------------------------------------------------------------------------
UILabel *label_3 = [[UILabel alloc] initWithFrame:CGRectMake(20, 200, 280, 50)];
[label_3 setNumberOfLines:0];
[label_3 setText:@""];
NSLog(@"%f -- %f", label_3.frame.size.width, label_3.frame.size.height);
// 280.000000 -- 50.000000
[label_3 sizeToFit];
NSLog(@"%f -- %f", label_3.frame.size.width, label_3.frame.size.height);
// 0.000000 -- 0.000000
NSLog(@"%f -- %f", label_3.frame.origin.x, label_3.frame.origin.y);
// 20.000000 -- 200.000000
[self.view addSubview:label_3];
[label_3 release];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
另外需要注意的是,调用label的sizeToFit或sizeThatFit之前,应该先给label赋给文字,也就是说,赋文字语句应放在sizeThatFit和SizeToFit之前