美文网首页
文字包裹的实现

文字包裹的实现

作者: js_huh | 来源:发表于2019-11-18 05:47 被阅读0次

"文字包裹"的实现(是什么? "字符串"整体多大,label就多大)

  1. 设置字体的大小(文字的大小,直接影响"字符串"整体的宽和高
  2. 获取文字真实占用的宽度和高度
  3. 给具体的label赋值
//设置文本属性 - 大小:17,字体:系统默认
NSDictionary *nameAttr = @{NSFontAttributeName:[UIFont systemFontOfSize:17]};
//返回'字符串'的实际宽度和高度
CGSize nameSize = [self.status.name sizeWithAttributes:nameAttr];
CGFloat nameW = ceil(nameSize.width);
CGFloat nameH = ceil(nameSize.height);
//设置label的frame
self.nameLabel.frame = CGRectMake(nameX, nameY, nameW, nameH);
方法解读:
 默认情况下,系统文字使用大小:12点, 字体:Helvetica(Neue)

sizeWithAttributes:
    是什么? NSString的方法.
 - (CGSize)sizeWithAttributes:(NSDictionary<NSAttributedStringKey, id> *)attrs;
    作用? 返回,设置了属性的文字占用边框的大小.(就是这段文字真实占用的宽度和高度)

 NSAttributedString
    是什么? 就是字符串对象.@interface NSAttributedString : NSObject
    作用? 设置与管理,字符串以及单个字符的相关属性(如: 字体,字间距,颜色的调整)

 NSAttributedStringKey
    是什么? 是NSAttributedString的常数(Constants)
            typedef NSString *NSAttributedStringKey;
    作用?   应用于属性字符串(NSAttributedString)的文本属性(Key).
           就是在字典里面,担任Key的位置.

 NSFontAttributeName
    是什么? 是'NSAttributedStringKey'里面的一种.专门用来描述文本的字体(UIFont)
    它对应的Value是UIFont对象.

注意:
sizeWithAttributes方法

  • 它返回的高度是一行的高度.
  • NSString str =@"abcd\nefg";//中间加了\n换行.
CGSize tempSize = [str sizeWithAttributes: @{NSFontAttributeName:[UIFont systemFontOfSize:17]} ];

tempSize 的长度为 @"abcd"的长度. 
而非, @"abcdefg"的长度

方法二:
boundingRectWithSize: options: attributes: context 实现文字包裹

此方法返回:
  给定选项和显示特征的矩形边框
参数的含义:
  boundingRectWithSize - 需要绘制的矩形大小
  options - 字符串绘制选项(以什么方式来绘制字符串)
    (如:NSStringDrawingUsesLineFragmentOrigin 指定原点为线段原点,不是基线原点) - (适用于多行文本的使用)
    NSStringDrawingUsesLineFragmentOrigin // 整个文本将以每行组成的矩形为单位计算整个文本的尺寸
  attributes - 应用于字符串的文本属性字典(如:字体
  context - 指定字符串上下文,调整时最小比例因子.
CGSize textSize = CGSizeMake(textW, MAXFLOAT);//文字的高度: MAXFLOAT-无穷
NSDictionary *textAttr = @{NSFontAttributeName:[UIFont systemFontOfSize:17]};//字体大小 17
//指定限制,获取实际字符串文本的边界
CGRect textR = [字符串文本 boundingRectWithSize:textSize options:NSStringDrawingUsesLineFragmentOrigin attributes:textAttr context:nil];
CGFloat H = textR.size.height;
self.text控件.frame = CGRectMake(X, Y, W, H);

相关文章

  • 文字包裹的实现

    "文字包裹"的实现(是什么? "字符串"整体多大,label就多大) 设置字体的大小(文字的大小,直接影响"字符串...

  • 宽度与高度

    1. 文字两端对齐套路,实现两行文字首尾对齐text-align: justify; 代码链接 套路: 包裹需要对...

  • css之float

    float - 浮动 原始意义:用来实现让文字环绕图片而已 特性:包裹 于 破坏 辟开浮动的“破坏性”。浮动就是个...

  • iOS 聊天功能基础实现

    需求:实现聊天文字收发功能,不需要图片,视频,音频等数据的传输。 内容:界面布局(UIButton包裹内容),通信...

  • TagEditText,类似微博标签的文本控件

    TagEditText实现了显示类似微博中的活动标签, 其特点是将一段文字中用'#'包裹的部分以特殊的颜色显示,并...

  • 记念

    文字的缝隙露出光来 锦云的图案把被子浸染 包裹清凉的街 包裹草甸花开的山野 包裹那一声秦腔悠长的年月 包裹繁星泄露...

  • [React-Native]flex-box实践(一)

    如果你希望文字居中显示,那么可以为Text包裹一个View 然后,在被包裹的Text中书写文字 一种较为常见的布局...

  • 移动端ios对lable radio的处理

    lable包裹radio,ios上点击文字不会变为checked,为label包裹元素添加csspointer-e...

  • em,i,strong,b标签的区别

    表现效果上来看,不添加css样式的情况下,i和em标签包裹的文字效果为斜体,而b和strong标签包裹的文字效果为...

  • 常用工具方法

    1.计算包裹文字cell的尺寸 (void)getCellWidthWithDataArray:(NSMutabl...

网友评论

      本文标题:文字包裹的实现

      本文链接:https://www.haomeiwen.com/subject/cxfvictx.html