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

  话不多说,上代码。

  

  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. F9 开发之左树右表中的左树

    1 首先在前端应用树树控件 <div class="fui-left"> <div role="head" title="地区选择& ...

  2. 关于Trie Tree简单实现

    最近突然有兴致hiho一下了,实现了下trie tree,感觉而言,还是挺有意思的,个人觉得这货不光可以用来查单词吧,其实也可以用来替代Hash,反正查找,插入复杂度都挺低的,哈哈,啥都不懂,瞎扯.. ...

  3. 第八章 监控 Zabbix

    1.1   YUM部署 Zabbix 2.4 1.  前期准备(省略) l   Yum源的配置 cd /etc/yum.repos.d/; mkdir old;mv ./* old/ rpm -Uvh ...

  4. 【转】如何将ACCESS数据库后缀名accdb改为mdb

    office 2007中的ACCESS数据库保存时,默认的后缀名是*.accdb, 但是在数据库编程中,用到的后缀名却是*.mdb, 不能直接将后缀名由 accdb 改为 mdb,虽然没有出错,但是编 ...

  5. typeof做类型判断时容易犯下的错

    学过js同学都知道js的数据类型有 字符串.数字.布尔.Null.Undefined和object(数组.function......) 作为一个初学者我一直认为每个数据类型返回的结果是这样的 typ ...

  6. MocorDroid编译工程快速建立编译环境

    function sprdLunch(){    declare -a arrProj    arrProj=`find out/target/product -name previous_build ...

  7. Java基础第二章

  8. 表格单元格td设置宽度无效的解决办法 .

    http://zzstudy.offcn.com/archives/11366 在做table页面时,有时对td设置的宽度是无效的,td的宽度始终有内部的内容撑开,可以设置padding,但直接设置w ...

  9. Java中泛型的理解

    Java中的泛型,本质上来说,就是是参数化类型,就是说所操作的数据类型被指定为一个参数,而不是确定的某种类型.这种数据类型可以用在类.接口和方法创建中.即泛型类.泛型接口.泛型方法.这样说可能不够生动 ...

  10. 【HELLO WAKA】WAKA iOS客户端 之一 APP分析篇

    由于后续篇幅比较大,所以调整了内容结构. 全系列 [HELLO WAKA]WAKA iOS客户端 之一 APP分析篇 [HELLO WAKA]WAKA iOS客户端 之二 架构设计与实现篇 [HELL ...