通过代码创建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标记构建更复杂的故事板——具有多个动画以及播放控制功能.但有时采用更复杂的故事板例程,并在代码中实现全部复杂功 ...
随机推荐
- HDU 5696 区间的价值 暴力
分析:枚举以该点为最小值,然后找到最大值,更新,相应数组,至此,把区间分割(因为包含这个最小值点已经枚举过) 然后理解理解,感觉好像挺对的...因为后面(即dfs区间变小时)如果再包含最小值节点,也不 ...
- e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (五) 如何让窗体记录登录状态Session
在写自动化测试的Node.js脚本时, 时常需要测试所写的case, 可能都需要去重新登录一遍,这将相当的耗时, 好在Selenium都借了Session的机制, 如果在最初的浏览器没有关闭的情况下, ...
- 中文Win7下成功安装calabash-android步骤
Calabash-android是支持android的UI自动化测试框架,网上看见很多同学说,安装calabash比较费劲,特别是Windows下安装,也没有一个详细的安装手册可供参考.正好,今天在W ...
- jenkins+ant+ssh远程部署服务glassfish
jenkins安装可以参考官网或自己百度,这里不再说明: jenkins版本2.19.2 这里先说一下目的:主要是通过jenkins实现glassfish的部署,源码使用的是svn,编译是使用ant, ...
- ubuntu网站做图像外链
http://paste.ubuntu.org.cn
- error: Setup script exited with error: Unable to find vcvarsall.bat
安装mxnet python版本时遇到“Unable to find vcvarsall.bat”错误搜索一下后查到如下方法: python 3.5.2版本依赖高版本的vs解决办法是安装vs2015的 ...
- 设计模式_Decorator_装饰模式
形象例子: Mary过完轮到Sarly过生日,还是不要叫她自己挑了,不然这个月伙食费肯定玩完,拿出我去年在华山顶上照的照片,在背面写上“最好的的礼物,就是爱你的Fita”,再到街上礼品店买了个像框(卖 ...
- ASP.NET入门(class0612)
内容:掌握基于ASP.Net的Web开发,B/S结构原理.ASP.Net内部原理.状态管理(Cookie.Session.ViewState等).数据验证.普通ASP.Net控件.母版.ListVie ...
- 【Spark学习】Spark 1.1.0 with CDH5.2 安装部署
[时间]2014年11月18日 [平台]Centos 6.5 [工具]scp [软件]jdk-7u67-linux-x64.rpm spark-worker-1.1.0+cdh5.2.0+56-1.c ...
- Java内存管理原理及内存区域详解
一.概述 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干不同的数据区域,这些区域都有各自的用途以及创建和销毁的时间.Java虚拟机所管理的内存将会包括以下几个运行时数据区域,如下 ...