通过xib创建label  让label随着文本内容的变化而动态改变尺寸比较简单  只要不固定死尺寸就可以了  但是通过代码创建的话我们需要给label设置一个frame  否则label默认是没有尺寸也就不会显示出来的

但是一旦我们设置了frame label的尺寸也就固定了  所以我们需要通过另外的属性来获取最佳的尺寸从而设置label的尺寸达到最佳的显示效果:

sizeThatFits

// return 'best' size to fit given size. does not actually resize view. Default is return existing view size

//会根据输入的文本长度  返回“最佳”大小适合给定的大小

使用:

        //首先创建一个label
UILabel *nameLabel = [[UILabel alloc]init];
nameLabel.font = [UIFont systemFontOfSize:];
//在设置frame之前要给label一个初始化的文字 没有文字的话label是没有尺寸的
nameLabel.text = @" ";
//设置想要的效果:比如说我想让label宽度固定 高度不固定 那我只需要设置好宽度就可以了 高度的话可以随便给个值
CGSize maximumLabelSize = CGSizeMake([UIScreen mainScreen].bounds.size.width - nameLabel.x-, );//labelsize的最大值
//根据文本内容返回最佳的尺寸
CGSize expectSize = [nameLabel sizeThatFits:maximumLabelSize];
//设置label的frame
nameLabel.frame = CGRectMake(CGRectGetMaxX(iconBtn.frame)+, iconBtn.y+,expectSize.width,expectSize.height);
//设置文字对齐方式
nameLabel.textAlignment = NSTextAlignmentLeft;
[self.contentView addSubview:nameLabel];

如果后面需要更改label中的文字内容或者重新赋值  还需要重新设置label的frame或者尺寸:

    //这个x与y是我在我的代码中设置的 不是固定的 要根据实际需求去设置  主要是长度与宽度的设置
CGSize maximumLabelSize = CGSizeMake([UIScreen mainScreen].bounds.size.width - _nickName.x-, );//labelsize的最大值
CGSize expectSize = [_nickName sizeThatFits:maximumLabelSize];
_nickName.frame = CGRectMake(CGRectGetMaxX(self.icon.frame)+, self.icon.y+,expectSize.width,expectSize.height);

效果图:

另外  我们经常会用到TTTAttributedLabel去达到某个功能 或者实现某个效果  效果图中的评论部分就是继承自TTTAttributedLabel的  行间距是自定义的  所以在计算最佳尺寸的时候 TTTAttributedLabel重写了sizeThatFits方法:

- (CGSize)sizeThatFits:(CGSize)size {
if (!self.attributedText) {
return [super sizeThatFits:size];
} else {
NSMutableAttributedString *fullString = [[NSMutableAttributedString alloc] initWithAttributedString:self.attributedText]; if (self.attributedTruncationToken) {
[fullString appendAttributedString:self.attributedTruncationToken];
} NSAttributedString *string = [[NSAttributedString alloc] initWithAttributedString:fullString]; CGSize labelSize = CTFramesetterSuggestFrameSizeForAttributedStringWithConstraints([self framesetter], string, size, (NSUInteger)self.numberOfLines);
labelSize.width += self.textInsets.left + self.textInsets.right;
labelSize.height += self.textInsets.top + self.textInsets.bottom; return labelSize;
}
}

所以即使是TTTAttributedLabel也能像普通label一样计算出最佳尺寸

注意:

  1.设置lable大小的时候需要先进行lable的text赋值  否则label会没有尺寸

2.如果要将lable居中显示的话,lable.center属性的设置必须放在设置新大小之后,不然会出现不居中的情况

通过代码创建label 计算最佳尺寸 让其自适应文本高度或宽度的更多相关文章

  1. 创建支持多种屏幕尺寸的Android应用

    Android涉及各种各样的支持不同屏幕尺寸和密度的设备.对于应用程序,Android系统通过设备和句柄提供了统一的开发环境,大部分工作是校正每一个应用程序的用户界面到它显示的屏上.与此同时,系统提供 ...

  2. [iOS基础控件 - 6.7] 微博展示 使用代码自定义TableCell(动态尺寸)

    A.需求 1.类似于微博内容的展示 2.头像 3.名字 4.会员标志 5.内容 6.分割线 7.配图(可选,可有可无)   code source: https://github.com/hellov ...

  3. 【Stage3D学习笔记续】山寨Starling(五):纹理计算和尺寸计算

    尺寸计算: Starling中的尺寸是以像素为单位的,这一切都得力于我们使用的正交矩阵,还记得我们顶点数据中的位置数据么,如果我们提交的矩形的四个顶点为(0, 0)(0, 100)(100, 0)(1 ...

  4. 有一个很大的整数list,需要求这个list中所有整数的和,写一个可以充分利用多核CPU的代码,来计算结果(转)

    引用 前几天在网上看到一个淘宝的面试题:有一个很大的整数list,需要求这个list中所有整数的和,写一个可以充分利用多核CPU的代码,来计算结果.一:分析题目 从题中可以看到“很大的List”以及“ ...

  5. IOS 计算文字尺寸(UILabel)

    方式1 :普通用法 #define  MJNameFont [UIFont systemFontOfSize:14] /** * 计算文字尺寸 * * @param text 需要计算尺寸的文字 * ...

  6. 使用代码创建AutoLayout约束

    使用代码创建AutoLayout约束 1.代码创建约束的步骤 2.代码创建约束的常用方法 3.代码创建约束的原则 4.禁用Autoresizing的原因 5. 设置相对状态栏的约束,使用self.to ...

  7. iOS UICollectionView(转一) XIB+纯代码创建:cell,头脚视图 cell间距

    之前用CollectionViewController只是皮毛,一些iOS从入门到精通的书上也是泛泛而谈.这几天好好的搞了搞苹果的开发文档上CollectionViewController的内容,亲身 ...

  8. iOS回顾笔记( 01 )-- XIB和纯代码创建应用的对比

    header{font-size:1em;padding-top:1.5em;padding-bottom:1.5em} .markdown-body{overflow:hidden} .markdo ...

  9. 【WPF学习】第五十七章 使用代码创建故事板

    在“[WPF学习]第五十章 故事板”中讨论了如何使用代码创建简单动画,以及如何使用XAML标记构建更复杂的故事板——具有多个动画以及播放控制功能.但有时采用更复杂的故事板例程,并在代码中实现全部复杂功 ...

随机推荐

  1. java jvm学习笔记四(安全管理器)

    欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一 ...

  2. Can't find file: './mysql/plugin.frm' (errno: 13)[mysql数据目录迁移错位]错误解决

    大概需要4个步骤,其中第1步通过service mysql stop停止数据库,第4步通过service mysql start启动数据库. 第2步移动数据文件,不知道是否为Ubuntu智能的原因,移 ...

  3. 017QTP 描述性编程的使用方法

    一.什么时候使用描述性编程 在测试过程中,有些界面元素是动态出现或动态变化的,在录制的时候并没有添加到对象库中 二.描述性编程的运行原理 用描述性编程编写的测试脚本在运行时,QTP会使用测试脚本中给出 ...

  4. 浏览器插件 - Chrome 对 UserScript 的声明头(metadata)兼容性一览

    1.这里的UserScript指的是,油猴插件或者Tampermonkey插件等支持的格式如下例子: // ==UserScript== // @name // @namespace http://A ...

  5. 设计模式_Decorator_装饰模式

    形象例子: Mary过完轮到Sarly过生日,还是不要叫她自己挑了,不然这个月伙食费肯定玩完,拿出我去年在华山顶上照的照片,在背面写上“最好的的礼物,就是爱你的Fita”,再到街上礼品店买了个像框(卖 ...

  6. [GC]一个简单的Garbage Collector的实现

    前言: 最近看了google的工程师写的一个非常简单的垃圾收集器,大概200多行C代码,感叹大牛总能够把复杂的东西通过很简单的语言和代码表达出来.为了增加自己的理解,决定把大牛的想法和代码分析一遍,与 ...

  7. HDU 1029 Ignatius and the Princess IV DP

    kuangbin 专题 这题,有很多种解法. 第一种: 直接比较每个数出现次数. #include<iostream> #include<string> #include< ...

  8. leetcode—word ladder II

    1.题目描述 Given two words (start and end), and a dictionary, find all shortest transformation sequence( ...

  9. HIbernate学习笔记(六) 关系映射之多对多

    六.多对多 - 单向 Ø        一般的设计中,多对多关联映射,需要一个中间表 Ø        Hibernate会自动生成中间表 Ø        Hibernate使用many-to-ma ...

  10. Linux更改默认jdk

    RHEL默认安装Open JDK--java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64,现在要换成Oracle JDK1.7.0_51 1. (可选)删 ...