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

  话不多说,上代码。

  

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

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

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

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

    2.1 UILabel宽度不变,改变高度

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

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

    2.2 UILabel高度不变,改变宽度

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

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

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

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

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

根据NSString字符串长度自动改变UILabel的frame的更多相关文章

  1. iOS UILabel根据字符串长度自动适应宽度和高度

    //这个frame是初设的,没关系,后面还会重新设置其size.     UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0,0, ...

  2. 扩展entity framework core 实现默认字符串长度,decimal精度,entity自动注册和配置

    报道越短,事情越严重!文章越短,内容越精悍! 文章以efcore 2.0.0-preview2.测试验证通过.其他版本不保证使用,但是思路不会差太远.源代码 目标: 1.实现entity的自动发现和m ...

  3. NSString字符串

    要把 “2011-11-29” 改写成 “2011/11/29”一开始想用ios的时间格式,后来用NSString的方法搞定. [string stringByReplacingOccurrences ...

  4. iOS - OC NSString 字符串

    前言 @interface NSString : NSObject <NSCopying, NSMutableCopying, NSSecureCoding> @interface NSM ...

  5. NSString 字符串

    0.字符串常用操作 自动补充方法:当字符串长度不够需要自动补充到一定的位数 OC字符串与C语言字符串之间的相互转换 1.不可变字符串的创建 // 直接创建不可变字符串 /* 在 OC 中,使用 @&q ...

  6. iOS小知识:计算字符串长度(如果有表情,表情的长度为1)

    在做项目的时候,textField能够输入表情,但是iOS的表情是占两个字符的,再计算字符串长度的时候就和想象的不一样了,所以用了次方法会将表情的长度转成1,最后得到的字符串的长度就是能看到的实际的长 ...

  7. Swift3.0语言教程获取字符串长度

    Swift3.0语言教程获取字符串长度 Swift3.0语言教程获取字符串长度,当在一个字符串中存在很多的字符时,如果想要计算字符串的长度时相当麻烦的一件事情,在NSString中可以使用length ...

  8. 字符串长度函数strlen()

    如下是我的测试文件: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { ...

  9. objective-c中字符串长度计算

    我们知道,在c语言中,使用sizeof ()计算在内存中占用的字节数, 引用string.h后,使用strlen()计算字符串的长度(不包含\0). 而在object-c中, "length ...

随机推荐

  1. 解决ie 低版本的 background-size 兼容问题

    在IE不支持这个属性的时候可以通过滤镜来实现这样的一个效果. div{background-size: cover;filter:progid:DXImageTransform.Microsoft.A ...

  2. ansible role 执行顺序

    the dependencies of the 'openshift-master' role.- docker- openshif_common  - os_firewall   - openshi ...

  3. 最新Node.js 资源汇总

    Node.js 资源汇总 文档 Node.js 官方文档:http://nodejs.org/api/ Node.js 中文文档:http://nodejs.jsbin.cn/api/ Express ...

  4. 逆向思维 UVA 11853

    题目大意:紫书175 思路:看书...2333 关键点就是利用已知条件来逆向思考是否能走通,而不是傻傻的从某个点开始出发啊啥的.

  5. Multidimensional Array And an Array of Arrays

    One is an array of arrays, and one is a 2d array. The former can be jagged, the latter is uniform. T ...

  6. 寒假学干货之------初步布局Layout

    在开发的最初,需要设计好我们的Activity,在res/layout下,找到**activitymian(名字都差不多的)的.xml文件,打开他就可以开始编辑. http://www.tuicool ...

  7. 学习前端前必知的——HTTP协议详解

    前端人士必备的知识点,无论你是否有经验,看了此文绝对有收获 此文针对前端爱好者,前端求职者(话说面试时很容易考到哦) 原文参考博客园http://kb.cnblogs.com/page/130970/ ...

  8. CodeForces 702B Powers of Two

    简单题. 开一个$map$记录一下每个数字出现了几次,那么读入的时候$f[a[i]]+1$. 计算$a[i]$做出的贡献的时候,先把$f[a[i]]-1$,然后再枚举$x$,答案加上$f[{2^x} ...

  9. js--事件对象的理解5-

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. 《JS权威指南学习总结--6.2属性的查询和设置》

    内容要点: 一.数组元素通过字符串索引而不是数字索引,这种数组就是我们所说的关联数组,也称散列.映射或字典. 二.继承 1.JS对象具有"自有属性",也有一些属性是从原型对象继承而 ...