富文本添加颜色大小及点击事件,防止最后一句断行显示。

本文章为了方便引用YYText第三方对富文本的显示以及点击事件进行自定义,当然也可以使用自带的方法进行定制,不过自带的方法使用起来较为繁琐。例如点击事件,自带的方法我们可以选择使用一个隐藏的UIButton进行实现,也可以给文本添加链接,在链接触发的代理中进行截取操作,做出相关动作等。下面贴上代码。

//初始化所需展示字符串

    NSMutableAttributedString * str = [[NSMutableAttributedString alloc] initWithString:@"春:盼望着,盼望着,东风来了,春天的脚步近了。一切都像刚睡醒的样子,欣欣然张开了眼。山朗润起来了,水涨起来了,太阳的脸红起来了。小草偷偷地从土地里钻出来,嫩嫩的,绿绿的。"];

    str.yy_font = [UIFont systemFontOfSize:17];//设置展示字符串大小

    CGRect firstRect = [str boundingRectWithSize:CGSizeMake(self.view.frame.size.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil];//计算当前所需高度

    

    [str yy_appendString:@"查看详情->>"];//添加查看详情text

    [str addAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:14]} range:NSMakeRange(str.length - 7, 7)];//改变查看详情字体大小

    [str yy_setTextHighlightRange:NSMakeRange(str.length - 7, 7) color:[UIColor blueColor] backgroundColor:[UIColor whiteColor] tapAction:^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) {

        NSLog(@"点击了");

    }];//使用YYText第三方改变查看详情的颜色以及点击事件

    CGRect secondRect = [str boundingRectWithSize:CGSizeMake(self.view.frame.size.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil];//计算含有查看详情的文本高度

    

    YYLabel * lable = [YYLabel new];//初始化一个YYLable

    lable.textColor = [UIColor blackColor];

    lable.numberOfLines = 0;

    //对两次高度进行比较

    if (secondRect.size.height > firstRect.size.height) {

        lable.frame = secondRect;

        [str yy_insertString:@"\n" atIndex:str.length - 7];//若第二次的大于第一次的,说明查看详情被折断或者换行显示,此时手动插入换行符

    }else{

        lable.frame = firstRect;

    }

    lable.attributedText = str;

    lable.center = self.view.center;

    

    [self.view addSubview:lable];


因为在网上找了半天,还是找不到一个能够防止最后一句“查看详情-->”加上后导致断行显示的解决方法,就自己想着用了lable高度的比较进行判断是否换行。如有不足请谅解。富文本添加颜色大小及点击事件,防止最后一句断行显示。_第1张图片

你可能感兴趣的:(iOS学习)