iOS 创建带有图片的富文本

简介: iOS 创建带有图片的富文本

引言

需求:展示信用卡标签信息,当特性标签存在多个时自动换行显示。每行特性标签信息以icon开头。

image.png

特性标签字段labelTitle

        "labelTitle" : "核卡105\r\n首刷后再补贴65",

应用场景:存在图片和文字并排展示,例如特性标签

image.png

核心步骤

1、初始化NSTextAttachment对象,设置image以及布局

2、创建带有图片的富文本

原理

使用NSAttachmentAttributeName属性设置文本附件功能来插入图片使用NSTextAttachment对象

I、富文本如何添加图片?

1.1 初始化NSTextAttachment对象

   NSTextAttachment *attchment = [[NSTextAttachment alloc]init];
//设置frame,【可选】
        attchment.bounds=CGRectMake(0,0,14,14);
        attchment.image= [UIImage imageNamed:@"icon_jinrong_dagouicon"];//设置图片

bounds 属性的y 值为负数时是向下移动,正数反之。

  • NSBaselineOffsetAttributeName 基准线偏移 NSNumber可用于调整布局

1.2 创建带有图片的富文本

@interface NSAttributedString (NSAttributedStringAttachmentConveniences)
// A convenience method for creating an attributed string containing attachment using NSAttachmentCharacter as the base character.
+ (NSAttributedString *)attributedStringWithAttachment:(NSTextAttachment *)attachment API_AVAILABLE(macos(10.0), ios(7.0));
@end

创建带有图片的富文本

//1.初始化NSTextAttachment对象
        NSTextAttachment *attchment = [[NSTextAttachment alloc]init];
        attchment.bounds=CGRectMake(0,0,14,14);//设置frame
        attchment.image= [UIImage imageNamed:@"icon_jinrong_dagouicon"];//设置图片
        //2.创建带有图片的富文本
        NSAttributedString *string = [NSAttributedString attributedStringWithAttachment:attchment];

1.3 例子:展示信用卡标签


image.png

#import <ChainAttributedString/NSMutableAttributedString+Chain.h>
- (NSMutableArray *)titleArr{
    NSMutableArray * tmp = [NSMutableArray arrayWithArray:[self.labelTitle componentsSeparatedByString:@"\r\n"]];
    [tmp removeObject:@""];
    [tmp removeObject:@" "];
    // 去除数组空字符串对象小技巧:iOS 利用NSSet和array的转换,进行快速去空去重
    NSSet *set = [NSSet setWithArray:tmp];
    NSArray *aaa = [set allObjects];
    return [NSMutableArray arrayWithArray:aaa];
}
- (NSMutableAttributedString*)getDtoNSMutableAttributedString4labelTitle{
    NSMutableAttributedString *attributedString  = [[NSMutableAttributedString alloc]init];
    for (NSString *title in self.titleArr) {
        NSLog(@"title:%@",title);
        if([NSStringQCTtoll isBlankString:title]){
            continue;
        }
        //1.初始化NSTextAttachment对象
        NSTextAttachment *attchment = [[NSTextAttachment alloc]init];
        attchment.bounds=CGRectMake(0,0,14,14);//设置frame
        attchment.image= [UIImage imageNamed:@"icon_jinrong_dagouicon"];//设置图片
        //2.创建带有图片的富文本
        NSAttributedString *string = [NSAttributedString attributedStringWithAttachment:attchment];
        [attributedString appendAttributedString:string];
        attributedString.kn_addString(@" ").kn_addString(title).kn_fontColor(rgba(0, 0, 0, 1)).kn_fontSize(kPingFangFont(13)).kn_addString(@"\n");
    }
    return attributedString;
}//    //    [attributedString insertAttributedString:string atIndex:0];//插入到第几个下标

II、基础知识

2.1 富文本属性

属性 用途 类型
NSFontAttributeName 字号 UIFont 默认12
NSParagraphStyleAttributeName 段落样式 NSParagraphStyle
NSForegroundColorAttributeName 前景色 UIColor
NSBackgroundColorAttributeName 背景色 UIColor
NSObliquenessAttributeName 字体倾斜 NSNumber
NSExpansionAttributeName 字体加粗 NSNumber 比例 0就是不变 1增加一倍
NSKernAttributeName 字间距 CGFloat
NSUnderlineStyleAttributeName 下划线 1或0
NSUnderlineColorAttributeName 下划线颜色 UIColor
NSStrikethroughStyleAttributeName 删除线 1或0
NSStrikethroughColorAttributeName 删除线颜色 UIColor
NSStrokeColorAttributeName same as ForegroundColor UIColor
NSStrokeWidthAttributeName 字体描边 CGFloat
NSLigatureAttributeName 连笔字 1或0
NSShadowAttributeName 阴影 NSShawdow
NSTextEffectAttributeName 设置文本特殊效果,目前只有图版印刷效果可用 NSString
NSAttachmentAttributeName 设置文本附件,常用插入图片 NSTextAttachment
NSLinkAttributeName 链接 NSURL (preferred) or NSString
NSBaselineOffsetAttributeName 基准线偏移 NSNumber,可用于布局
NSWritingDirectionAttributeName 文字方向 分别代表不同的文字出现方向@[@(1),@(2)]
NSVerticalGlyphFormAttributeName 水平或者竖直文本 1竖直 0水平
  • NSFontAttributeName 字号 UIFont 默认12
  • NSParagraphStyleAttributeName 段落样式 NSParagraphStyle
  • NSForegroundColorAttributeName 前景色 UIColor
  • NSBackgroundColorAttributeName 背景色 UIColor
  • NSObliquenessAttributeName 字体倾斜 NSNumber
  • NSExpansionAttributeName 字体加粗 NSNumber 比例 0就是不变 1增加一倍
  • NSKernAttributeName 字间距 CGFloat
  • NSUnderlineStyleAttributeName 下划线 1或0
  • NSUnderlineColorAttributeName 下划线颜色 UIColor
  • NSStrikethroughStyleAttributeName 删除线 1或0
  • NSStrikethroughColorAttributeName 删除线颜色 UIColor
  • NSStrokeColorAttributeName same as ForegroundColor UIColor
  • NSStrokeWidthAttributeName 字体描边 CGFloat
  • NSLigatureAttributeName 连笔字 1或0
  • NSShadowAttributeName 阴影 NSShawdow
  • NSTextEffectAttributeName 设置文本特殊效果,目前只有图版印刷效果可用 NSString
  • NSAttachmentAttributeName 设置文本附件,常用插入图片 NSTextAttachment
  • NSLinkAttributeName 链接 NSURL (preferred) or NSString
  • NSBaselineOffsetAttributeName 基准线偏移 NSNumber可用于调整布局
  • NSWritingDirectionAttributeName 文字方向 分别代表不同的文字出现方向 @[@(1),@(2)]
  • NSVerticalGlyphFormAttributeName 水平或者竖直文本 1竖直 0水平

2.2 布局小技巧

image.png

下划线的top的约束参照对象是iconImgV和tagLab两者之间的Y的较大值

- (UILabel *)lineLab{
    if (nil == _lineLab) {
        UILabel *tmpView = [[UILabel alloc]init];
        _lineLab = tmpView;
        [self addSubview:_lineLab];
        tmpView.backgroundColor = k_tableView_Line;
        __weak __typeof__(self) weakSelf = self;
        [_lineLab mas_makeConstraints:^(MASConstraintMaker *make) {
            make.height.mas_equalTo(LineH);
            make.left.equalTo(weakSelf).offset(kAdjustRatio(10));
            make.right.equalTo(weakSelf).offset(kAdjustRatio(-10));
            make.bottom.equalTo(weakSelf);
            make.top.greaterThanOrEqualTo(weakSelf.iconImgV.mas_bottom).offset(kAdjustRatio(18));
            make.top.greaterThanOrEqualTo(weakSelf.tagLab.mas_bottom).offset(kAdjustRatio(18));
        }];
    }
    return _lineLab;
}

see also

iOS富文本使用指南【持续更新中】:

1、封装富文本API,采用block实现链式编程

2、 超链接属性

3、HTML字符串与富文本互转

4、在适配系统API的应用


目录
相关文章
|
6月前
|
JSON JavaScript 安全
iOS应用程序数据保护:如何保护iOS应用程序中的图片、资源和敏感数据
iOS应用程序数据保护:如何保护iOS应用程序中的图片、资源和敏感数据
58 1
|
iOS开发
iOS TextView插入表情或者图片后字体变大或变小
iOS TextView插入表情或者图片后字体变大或变小
110 1
|
Android开发 iOS开发
iOS 替换WebView网页图片为本地图片
iOS 替换WebView网页图片为本地图片
261 0
|
6月前
|
存储 缓存 安全
基于iOS平台的高效图片缓存策略实现
【4月更文挑战第22天】 在移动应用开发中,图片资源的加载与缓存是影响用户体验的重要因素之一。尤其对于iOS平台,由于设备存储空间的限制以及用户对流畅性的高要求,设计一种合理的图片缓存策略显得尤为关键。本文将探讨在iOS环境下,如何通过使用先进的图片缓存技术,包括内存缓存、磁盘缓存以及网络请求的优化,来提高应用的性能和响应速度。我们将重点分析多级缓存机制的设计与实现,并对可能出现的问题及其解决方案进行讨论。
|
6月前
|
存储 缓存 算法
实现iOS平台的高效图片缓存策略
【4月更文挑战第22天】在移动应用开发中,图片资源的处理是影响用户体验的重要因素之一。特别是对于图像资源密集型的iOS应用,如何有效地缓存图片以减少内存占用和提升加载速度,是开发者们面临的关键挑战。本文将探讨一种针对iOS平台的图片缓存策略,该策略通过结合内存缓存与磁盘缓存的机制,并采用先进的图片解码和异步加载技术,旨在实现快速加载的同时,保持应用的内存效率。
|
6月前
|
存储 缓存 编解码
实现iOS平台的高效图片缓存策略
【4月更文挑战第23天】在移动应用开发领域,尤其是图像处理密集型的iOS应用中,高效的图片缓存策略对于提升用户体验和节省系统资源至关重要。本文将探讨一种针对iOS平台设计的图片缓存方案,该方案通过结合内存缓存与磁盘缓存的多层次结构,旨在优化图片加载性能并降低内存占用。我们将深入分析其设计理念、核心组件以及在实际场景中的应用效果,同时对比其他常见缓存技术的优势与局限。
|
6月前
|
存储 Web App开发 Android开发
iOS不支持WebP格式图片解决方案和iPhone 7及其后硬件拍照的HEIC格式图片
iOS不支持WebP格式图片解决方案和iPhone 7及其后硬件拍照的HEIC格式图片
600 1
iOS不支持WebP格式图片解决方案和iPhone 7及其后硬件拍照的HEIC格式图片
|
6月前
|
iOS开发
iOS中如何显示后台返回的带有html标签的富文本字符串
iOS中如何显示后台返回的带有html标签的富文本字符串
59 0
|
6月前
按钮的image图片是非圆角,直接对UIButton设置圆角,iOS13系统没有圆角效果的问题及解决方案
按钮的image图片是非圆角,直接对UIButton设置圆角,iOS13系统没有圆角效果的问题及解决方案
47 0
|
6月前
|
存储 缓存 iOS开发
实现iOS平台的高效图片缓存策略
【4月更文挑战第4天】在移动应用开发中,图片资源的加载与缓存是影响用户体验的关键因素之一。尤其对于iOS平台,由于设备存储和内存资源的限制,设计一个高效的图片缓存机制尤为重要。本文将深入探讨在iOS环境下,如何通过技术手段实现图片的高效加载与缓存,包括内存缓存、磁盘缓存以及网络层面的优化,旨在为用户提供流畅且稳定的图片浏览体验。