iOS-UILabel 自动换行

根据UILabel的内容,动态调整UILabel的高度

    /**

     UILabel有一个属性:numberOfLines

     设置这个属性的值为 0 即:numberOfLines=0 ),UILabel就可以自动换行了

     但是,我们并不确定正确显示UILabel中的内容,实际需要的高度

     

     所以,我们就需要用到NSString的一个方法:boundingRectWithSize:<#(CGSize)#> options:<#(NSStringDrawingOptions)#> attributes:<#(NSDictionary *)#> context:(NSStringDrawingContext *)

     

     用这个方法获取正常显示文本框的内容,实际需要的高度

     注:这个方法会返回一个CGRect对象,我们只需要一个height,用来设置UILabel的高度

     

     这个方法有 4 个参数:

        1boundingRectWithSize:<#(CGSize)#>width值传我们需要测试的UILabel的宽度,因为高度不确定,所以height先用 MAXFLOAT

     

        2options:<#(NSStringDrawingOptions)#>//这个选项是一个枚举类型,选项如下:

     

            typedef NS_ENUM(NSInteger, NSStringDrawingOptions) {

     

                NSStringDrawingTruncatesLastVisibleLine = 1 << 5, //计算文本尺寸时将以每个字或字形为单位来计算

                NSStringDrawingUsesLineFragmentOrigin = 1 << 0, //整个文本将以每行组成的矩形为单位计算整个文本的尺寸

                NSStringDrawingUsesFontLeading = 1 << 1, //以字体间的行距(leading,行距:从一行文字的底部到另一行文字底部的间距。)来计算

                NSStringDrawingUsesDeviceMetrics = 1 << 3, //计算文本尺寸时将以每个字或字形为单位来计算

            } NS_ENUM_AVAILABLE_IOS(6_0);

     

            //我们这里用到的就是 NSStringDrawingUsesLineFragmentOrigin NSStringDrawingUsesFontLeading


        3attributes:<#(NSDictionary *)#>//这里填写字体的属性,我们传入字体的大小就可以了(例:@{ NSFontAttributeName: UILabelfont属性 }

     

        4context:(NSStringDrawingContext *):置为 nil 就行了

     */


//**********下面是我做的一个demo**********


//第一步:定义一个全局的UILabel

    @property(nonatomic,strongUILabel *testLabel;


//第二步:用懒加载的方式初始化

- (UILabel *)testLabel {

    

    if (_testLabel) {

        

        _testLabel = [UILabel new];

        _testLabel.frame = CGRectMake(1020030030);

        _testLabel.font = [UIFont systemFontOfSize:18];

        _testLabel.text = @"我是label!";

        _testLabel.backgroundColor = [UIColor grayColor];

        //设置为自动换行模式

        _testLabel.numberOfLines=0;

    }

    return _testLabel;

}


//第三步:在ViewDidLoad

    //1、添加此控件

    [self.view addSubview:self.testLabel];

    //现在可以运行看下效果


    //2、更改testLabel的内容

    _testLabel.text=@"我是用来测试的文本,我的任务是测试自动换行是否成功!我是用来测试的文本,我的任务是测试自动换行是否成功!我是用来测试的文本,我的任务是测试自动换行是否成功!";


//现在再次运行我们会发现文本内容增加了,但textLabel的高度需要调整


//第四步:我们写一个方法,用来返回新内容应该需要的高度

/**

 这个方法需要 3 个参数

    1string:文本内容

    2width:每一行的宽度

    3、字体大小

 */

- (CGFloat)autoSizeWithString:(NSString *)string Width:(CGFloat)width Font:(UIFont*)font {

    

    //限制范围

    CGSize boundRectSize = CGSizeMake(width, MAXFLOAT);

    //字体(字典)

    NSDictionary *fontDict = @{ NSFontAttributeName: font };

    //调用方法,得到高度

    CGFloat newFloat = [string boundingRectWithSize:boundRectSize

                                          optionsNSStringDrawingUsesLineFragmentOrigin

                                                   | NSStringDrawingUsesFontLeading

                                       attributes:fontDict context:nil].size.height;

    return newFloat;

}


//第五步:在viewDidLoad中调用这个方法得到新内容实际需要的高度

    

    CGRect rect=_testLabel.frame;

    rect.size.height=[self autoSizeWithString:_testLabel.text Width:200 Font:_testLabel.font];

    _testLabel.frame = rect;

    //现在再次运行,看下效果,是不是已经可以啦!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值