利用YYLabel 进行图文混排+高度计算

利用YYLabel 进行图文混排+高度计算

1、项目需求:

用一个控件显示图片和文字,并且依据图片和文字动态计算控件的高度。

2、方案:

利用YYLabel控件和属性字符串处理。

注:(在使用YYLabel之前,使用UILabel测试过,但是发现在图文混排的时候。利用属性字符串计算高度不太准确。会有多余的文字不显示。)

示例代码

//使用YYText 处理富文本行高

YYLabel *contentL = [[YYLabel alloc] init];
//设置多行
contentL.numberOfLines = 0;
//这个属性必须设置,多行才有效
contentL.preferredMaxLayoutWidth = kScreenWidth -32;

 NSMutableAttributedString *attri = [[NSMutableAttributedString alloc] initWithAttributedString:[OSCBaseCommetView contentStringFromRawString:commentItem.content withFont:24.0]];

//可以将要插入的图片作为特殊字符处理
//需要使用 YYAnimatedImageView 控件,直接使用UIImage添加无效。

YYAnimatedImageView *imageView1= [[YYAnimatedImageView alloc] initWithImage:[UIImage imageNamed:@"ic_quote_left"]];
imageView1.frame = CGRectMake(0, 0, 16, 16);

YYAnimatedImageView *imageView2= [[YYAnimatedImageView alloc] initWithImage:[UIImage imageNamed:@"ic_quote_right"]];
imageView2.frame = CGRectMake(0, 0, 16, 16);
// attchmentSize 修改,可以处理内边距
NSMutableAttributedString *attachText1= [NSMutableAttributedString attachmentStringWithContent:imageView1 contentMode:UIViewContentModeScaleAspectFit attachmentSize:imageView1.frame.size alignToFont:[UIFont systemFontOfSize:24] alignment:YYTextVerticalAlignmentCenter];

NSMutableAttributedString *attachText2= [NSMutableAttributedString attachmentStringWithContent:imageView2 contentMode:UIViewContentModeScaleAspectFit attachmentSize:imageView2.frame.size alignToFont:[UIFont systemFontOfSize:24] alignment:YYTextVerticalAlignmentCenter];

 //插入到开头
[attri insertAttributedString:attachText1 atIndex:0];
 //插入到结尾
[attri appendAttributedString:attachText2];

//用label的attributedText属性来使用富文本
contentL.attributedText = attri;

CGSize maxSize = CGSizeMake([UIScreen mainScreen].bounds.size.width - 32, MAXFLOAT);

//计算文本尺寸
YYTextLayout *layout = [YYTextLayout layoutWithContainerSize:maxSize text:attri];
contentL.textLayout = layout;
CGFloat introHeight = layout.textBoundingSize.height;


contentL.frame =  commentItem.layoutInfo.contentTextViewFrame;
contentL.width = maxSize.width;

contentL.height = introHeight + 50;

[self addSubview:contentL];

最终效果

屏幕快照 2017-05-02 下午6.00.31.png

参考链接:

http://www.jianshu.com/p/e6d4b2f96b4c

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 155,795评论 24 679
  • 一个领导的话语模式应该是这样的:我相信,只要大家努力,我们就可以……告诉我,你想要什么?……来,说说你的看法,让我...
    小葵爱书阅读 91评论 0 1
  • 周二早盘开盘2914点小幅高开,冲高2934点回落,临近午盘出现急速拉升,收2961点。成交量继续萎缩! 板块上,...
    股哥看盘阅读 58评论 0 1
  • 1.香菜配荞麦面凉粉,饺子,大鸡腿。 这三样东西是我小时候饭桌上时不时秀一下存在感的食物。爹妈越鼓励乃至于强迫我吃...
    臭不要脸妖阅读 287评论 2 6