ios 根据文字数量计算UILabel高度

来源:互联网 发布:核聚变 不能实现 知乎 编辑:程序博客网 时间:2024/05/16 17:06

一、实现代码

复制代码
    //申明时的label的高度可以随便设置,因为之后计算出高度后还需要从设置一次    UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(10, 0, DEVICE_Width-20, 150)];    label.text = @"《蛮荒记》的故事展开:大荒586年, 神农化羽,神帝之位悬空,引发金、木、水、火、土五族大战。神农传人拓跋野与义弟蚩尤联合对抗侵略者,双军交锋,大地却在战场中央裂开,封印太古凶魔的皮母地丘重现人间,混沌一出,天下将亡。这版概念海报一经曝光,立刻引发不少网友围观。 2015年的影视圈,掀起了网络文学改编IP的热潮:根据《盗墓笔记》、《鬼吹灯》等热门IP改编的多部电视剧、电影相继上映。2016年伊始,阿里影业也放“大招”,正式宣布《蛮荒记》这一IP也将搬上大银幕。  据《蛮荒记》项目制片人夏天尘介绍,电影《蛮荒记》将是一个类似魔兽世界“艾泽拉斯大陆”的东方上古世界观,“如果一定要做直观的类比,艾泽拉斯大陆讲巨魔、精灵、土灵、矮人、侏儒,我们讲天下诸帝、五大圣女、大荒十神、大荒十大妖女,以《山海经》为蓝本,故事情节取材并贯通华夏传说,将全新的上古世界搬上大银幕。电影的视觉审美和世界观塑造都将打破中国人传统认知,让观众感觉熟悉却又颠覆。";      label.backgroundColor = [UIColor redColor];    label.textColor = [UIColor whiteColor];    label.textAlignment = NSTextAlignmentCenter;    label.lineBreakMode = NSLineBreakByWordWrapping;    label.font=[UIFont systemFontOfSize:13];    //下面/15这里的15就是13号字体的宽度,这里是用label的宽度/15(单个字体的宽度)计算出这个label的宽度每行能放多少个汉字    int WordCount=label.frame.size.width/15;    //下面是使用字体的长度(就是字体的个数)/上面计算出的每行存放字体的个数,算出一共有多少行    CGFloat heightCount= label.text.length/WordCount;    //heightCount*15  下面我们就是通过上一步计算出的 行数*字体的高度,计算出label最终的展示高度    [label setFrame:CGRectMake(label.frame.origin.x, 0, label.frame.size.width,heightCount*15 )];    label.numberOfLines = 0;     [self addSubview:label];
复制代码



CELL 返回高度
NSString * htmlString = Label;
    NSAttributedString * attrStr = [[NSAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil];
    self.Label.attributedText = attrStr;
    CGSize size = CGSizeMake(kScreenWidth-30, MAXFLOAT);
    UIFont *lfont = [UIFont systemFontOfSize:14];
    self.Label.font = lfont;
    NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:lfont,NSFontAttributeName, nil];
    CGSize actsize = [attrStr.string boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:dic context:nil].size;
    self.Label.frame = CGRectMake(15, 10, kScreenWidth-30, actsize.height);
    CGRect frame = [self frame];
    frame.size.height = self.Label.frame.size.height+35;
    self.frame = frame;

-------------
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
    return cell.frame.size.height;  
}
0 0
原创粉丝点击