通过代码创建label 计算最佳尺寸 让其自适应文本高度或宽度
通过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 计算最佳尺寸 让其自适应文本高度或宽度的更多相关文章
- 创建支持多种屏幕尺寸的Android应用
Android涉及各种各样的支持不同屏幕尺寸和密度的设备.对于应用程序,Android系统通过设备和句柄提供了统一的开发环境,大部分工作是校正每一个应用程序的用户界面到它显示的屏上.与此同时,系统提供 ...
- [iOS基础控件 - 6.7] 微博展示 使用代码自定义TableCell(动态尺寸)
A.需求 1.类似于微博内容的展示 2.头像 3.名字 4.会员标志 5.内容 6.分割线 7.配图(可选,可有可无) code source: https://github.com/hellov ...
- 【Stage3D学习笔记续】山寨Starling(五):纹理计算和尺寸计算
尺寸计算: Starling中的尺寸是以像素为单位的,这一切都得力于我们使用的正交矩阵,还记得我们顶点数据中的位置数据么,如果我们提交的矩形的四个顶点为(0, 0)(0, 100)(100, 0)(1 ...
- 有一个很大的整数list,需要求这个list中所有整数的和,写一个可以充分利用多核CPU的代码,来计算结果(转)
引用 前几天在网上看到一个淘宝的面试题:有一个很大的整数list,需要求这个list中所有整数的和,写一个可以充分利用多核CPU的代码,来计算结果.一:分析题目 从题中可以看到“很大的List”以及“ ...
- IOS 计算文字尺寸(UILabel)
方式1 :普通用法 #define MJNameFont [UIFont systemFontOfSize:14] /** * 计算文字尺寸 * * @param text 需要计算尺寸的文字 * ...
- 使用代码创建AutoLayout约束
使用代码创建AutoLayout约束 1.代码创建约束的步骤 2.代码创建约束的常用方法 3.代码创建约束的原则 4.禁用Autoresizing的原因 5. 设置相对状态栏的约束,使用self.to ...
- iOS UICollectionView(转一) XIB+纯代码创建:cell,头脚视图 cell间距
之前用CollectionViewController只是皮毛,一些iOS从入门到精通的书上也是泛泛而谈.这几天好好的搞了搞苹果的开发文档上CollectionViewController的内容,亲身 ...
- iOS回顾笔记( 01 )-- XIB和纯代码创建应用的对比
header{font-size:1em;padding-top:1.5em;padding-bottom:1.5em} .markdown-body{overflow:hidden} .markdo ...
- 【WPF学习】第五十七章 使用代码创建故事板
在“[WPF学习]第五十章 故事板”中讨论了如何使用代码创建简单动画,以及如何使用XAML标记构建更复杂的故事板——具有多个动画以及播放控制功能.但有时采用更复杂的故事板例程,并在代码中实现全部复杂功 ...
随机推荐
- 《Oracle Database 12c DBA指南》第一章 - 基本技能简介
当前关于12c的中文资料比较少,本人将关于DBA的一部分官方文档翻译为中文,很多地方为了帮助中国网友看懂文章,没有按照原文句式翻译,翻译不足之处难免,望多多指正. 1 基本技能简介 作为一个数据库管理 ...
- activemq 的小实验
package ch02.chat; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms ...
- uva 11468 Substring
题意:给你 k 个模板串,然后给你一些字符的出现概率,然后给你一个长度 l ,问你这些字符组成的长度为 l 的字符串不包含任何一个模板串的概率. 思路:AC自动机+概论DP 首先用K个模板构造好AC自 ...
- uvalive 4119 Always an Interger
差分数列+字符串处理 题意:是让你判断一个整系数多项式的值是否一直都能被一个所给的正整数所整除. 通过对差分数列的不断求导,我们可以发现,对于任意多项式P,我们只需要判断n从1到k+1是否满足就行了, ...
- uvalive 4795 Paperweight
题意:给出一个5个顶点的多面体以及多面体内一点P.求让 多面体不同的方式(即以不同的面)放在地面上,设这个着地的面为A,多面体重心在A上的投影为B,在保证B在A内部且距离A的各个边界不小于0.2的前提 ...
- ffmpeg常见命令
一.安装 下载ffmpeg,解压之后配置环境变量即为安装 打开dos界面,进入目标文件夹例如:E:/ cd E:\BaiduYunDownload\ffmpeg\ffmpeg_simple ...
- 如何搭建ss服务器
由于是Red Hat系统,缺少epel包,需要先安装该包才能安装python-pip,命令如下: rpm -iUvh http://dl.fedoraproject.org/pub/epel/7/x8 ...
- 配置OpenStack以使用LDAP实现身份管理
本文展示了如何配置 Keystone,以便使用轻量级目录http://www.aliyun.com/zixun/aggregation/34570.html">访问协议( LDAP)服 ...
- 3.x的触摸响应机制
第一种是采用函数回调,主要是用于MenuItem [cpp] view plaincopy // a selector callback void menuCloseCallback(Object* ...
- AQTime教程(1)
AQTime教程 1 简介 AQTime和MemProof都是AutomatedQA旗下的产品,AQTime比MemProof提供了更丰富强大的功能.该产品含有完整的性能和调试工具集,能够收集程序运行 ...