获取指定<文字行数>的<高度>是多少 TextKit

- (CGSize)maxLineSizeWithLines:(NSInteger)lines constraintSize:(CGSize)size attributes:(NSDictionary*)dicAttr
{  //负责布局渲染
    NSLayoutManager* manager = [[NSLayoutManager alloc] init];
      //指定渲染的区域
    NSTextContainer* con = [[NSTextContainer alloc] initWithSize:size];
    con.lineFragmentPadding = 0; //行间距
    con.maximumNumberOfLines = lines;//最多显示的行数
    [manager addTextContainer:con];
      //负责存储文字内容
    NSTextStorage* storage = [[NSTextStorage alloc] initWithString:_str];
    [storage addLayoutManager:manager];
    [storage addAttributes:dicAttr range:NSMakeRange(0, _str.length)];

    CGRect rt = [manager boundingRectForGlyphRange:NSMakeRange(0, _str.length) inTextContainer:con];
    return rt.size;
}

//下面是测试代码
 UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, 200, kWidth, 100)];
    label.backgroundColor = [UIColor greenColor];
    label.numberOfLines = 0;
    label.font = [UIFont systemFontOfSize:15];
    [self.view addSubview:label];

     _str = @"啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊";

    label.text = _str;

    NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc]init];
    style.lineSpacing = 0;

    NSDictionary *dic = @{NSFontAttributeName:[UIFont systemFontOfSize:15],NSParagraphStyleAttributeName:style};

    CGSize size = [self maxLineSizeWithLines:2 constraintSize:CGSizeMake(kWidth, 200) attributes:dic];

    NSLog(@"%@",NSStringFromCGSize(size));

    label.height = size.height;  //返回的size 就是两行文字所占的高度

原文地址:https://www.cnblogs.com/daxueshan/p/9245343.html

时间: 2024-11-10 08:38:12

获取指定<文字行数>的<高度>是多少 TextKit的相关文章

获取指定开始行数$start,跨度$limit的文件内容

// 获取指定开始行数$page,跨度$step的文件内容 function getLine($file_name, $start, $limit) { $f = new SplFileObject($file_name, 'r'); $f->seek($start); $ret = ""; for ($i = 0; $i < $limit; $i++) { try { $ret .= $f->getCurrentLine(); $f->next(); } ca

android获取textview的行数

最近项目需求,需要获取Textview的行数,通过行数与TextView的maxLines进行比较来确定是否显示TextView下方的展开按钮是否显示,废话少说直接上代码,mTextView.getLineCount() ,似乎很美好,安卓有提供这个方法,但是总是返回0,这是为啥呢?官方注释如下: /** * Return the number of lines of text, or 0 if the internal Layout has not * been built. */ 也就是说只

web开发学习笔记(4):js获取table的行数和表格中某一行某一列的内容

table的id="tab" 一.获取table的行数 var count=document.getElementById("tab").rows.length; 二.获取第i行第j列的内容(方式不止三种,根据实际情况选择,比较推荐方式一) 方式一: <pre name="code" class="html"><strong>var title=tab.rows[i].cells[j].children

ExtJS获取Grid的行数

1.     grid.getSelectionModel().getCount() ;  // 获得当前选中的行数  2.     grid.getStore().getTotalCount();  // 获得记录总数  3.     grid.getStore().getCount();   // 获得当前页的记录总数 ExtJS获取Grid的行数,布布扣,bubuko.com

js日期的写法,获取girdviw的行数、提示信息、验证数量信息

//制订日期(js日期的写法) var myDate = new Date(); var theDate = myDate.toLocaleDateString();  //获取今天的日期 //获取控件选择的日期并进行转换 var s = ASPxDateEdit1.GetValue(); var y = new Date(s).getFullYear(); var m = new Date(s).getMonth() + 1; // m = m < 10 ? ('0' + m) : m; va

[获取行数]php读取大文件提供性能的方法,PHP的stream_get_line函数读取大文件获取文件的行数的方...

背景: 下面是获取文件的行数的方法: 一个文件如果知道有几行的话,就可以控制获取一定的行数的数据,然后放入数据库.这样不管的读取大文件的性能,还是写入数据库的性能,都能得到很大的提高了. 下面是获取文件的行数的方法 $temp_file = 'error.log'; $fp = fopen($temp_file ,'r') or die("open file failure!"); $total_line = 0; if($fp){     /* 获取文件的一行内容,注意:需要php5

删除log文件末尾中指定的行数

/// <summary>        /// 删除log文件末尾中指定的行数        /// </summary>        /// <param name="file">文件路径</param>        /// <param name="line">删除的行数</param>        public static void deleteLogToLine(string

RobotFramework获取table的行数

RobotFramework获取table的行数,用以下关键字: ${lineNumber}= Get Matching Xpath Count //*[@class='dataview']/tbody/tr 原文地址:https://www.cnblogs.com/daphnezhu/p/12132160.html

如何获取ResultSet的行数和列数

当我们执行数据库查询返回一个ResultSet的时候,很多情况下我们需要知道这个ResultSet的大小,即它的行数和列数.我们知道它的列数可以通过resultSet.getMetaData().getColumnCount()很容易地得到,然而,java API没有提供直接访问ResultSet行数的接口. 这个时候,有三个办法可以解决: 1.改用select count语句,然后直接从ResultSet里面获取结果: try { Statement statement = connectio