• 根据NSString字符串长度自动改变UILabel的frame


      相信大家都遇到过这种需求。如果一个不慎,容易做成这个模样:

      话不多说,上代码。

      

      1.首先,设置UILabel的相关属性

    1    UILabel *tmpLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 200, [UIScreen mainScreen].bounds.size.width - 20, 20)];
    2     [tmpLabel setNumberOfLines:0];
    3     [self.view addSubview:tmpLabel];

      就这些?就这些。只需要初始化,只需要设置行数为0,也就是行数无上限(自动换行)就可以添加到父视图上了。其他的UILabel的属性你想设置就设置,不想设置就设置上面这些就可以。

      2.根据字符串NSString获得UILabel的frame

        2.1 UILabel宽度不变,改变高度

    1     //宽度不变,根据字的多少计算label的高度
    2     NSString *str = @"可以更改此内容进行测试,宽度不变,高度根据内容自动调节";
    3     CGSize size = [str sizeWithFont:tmpLabel.font constrainedToSize:CGSizeMake(tmpLabel.frame.size.width, MAXFLOAT) lineBreakMode:NSLineBreakByWordWrapping];
    4     //根据计算结果重新设置UILabel的尺寸
    5     [tmpLabel setFrame:CGRectMake(tmpLabel.frame.origin.x,tmpLabel.frame.origin.y, size.height, size.height)]; 
    6    [tmpLabel setText:str];

      使用sizeWithFont方法来获得CGSize。其中,宽度我们设置为我们UILabel的width;高度设置为MAXFLOAT,一个宏,代表CGFloat最大值;lineBreakMode设置为NSLineBreakByWordWrapping。这样就可以设置UILabel宽度不变,高度根据NSString改变了。

        2.2 UILabel高度不变,改变宽度

    1   //高度固定不折行,根据字的多少计算label的宽度  
    2   NSString *str = @"高度不变获取宽度,获取字符串不折行单行显示时所需要的长度";  
    3   CGSize size = [str sizeWithFont:label.font constrainedToSize:CGSizeMake(MAXFLOAT, label.frame.size.height)]; 
    4   //根据计算结果重新设置UILabel的尺寸 5   [label setFrame:CGRectMake(tmpLabel.frame.origin.x,tmpLabel.frame.origin.y, size.width, size.height)];
    6   label.text = str;

      同样的设置。唯一的不同在于我们不需要设置折行模式了。这样就设置成为UILabel高度不变,改变宽度了。

      3.如果是iOS7.0之后,它会提示你sizeWithFit这个方法被废弃了。提示我们使用下面的方法替代:

    1   //宽度不变,根据字的多少计算label的高度
    2   NSString *str = @"可以更改此内容进行测试,宽度不变,高度根据内容自动调节";
    3   CGSize textSize = [str boundingRectWithSize:CGSizeMake(tmpLabel.frame.size.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:tmpLabel.font} context:nil].size;    

      改为boundingRectWithSize这个方法来改变字符串长度。通过更改options的参数NSStringDrawingOptions来决定是高固定改变宽度还是宽固定改变高度。

  • 相关阅读:
    4.PHP正则表达式与数组
    3.PHP条件语句及其字符串相关函数
    3.PHP条件语句及其字符串相关函数
    2.PHP语言基础
    2.PHP语言基础
    1.简单认识PHP和环境搭建
    1.简单认识PHP和环境搭建
    Windows PE 第十章 加载配置信息
    #Leetcode# 20.Valid Parentheses
    #Leetcode# 14. Longest Common Prefix
  • 原文地址:https://www.cnblogs.com/SoulKai/p/5972779.html
Copyright © 2020-2023  润新知