UILable sizeToFit

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之前

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值