「Swift」AttributedString常见使用方法

前言:AttributedString是Apple推出的可以实现单个字符或字符范围带相应属性的字符串。属性提供了一些文本特性,可以让文本展示的样式更加丰富。在日常开发过程中,我通常用于同一个Label中包含不同的字体大小或字体颜色的样式编写中。

使用举例

需求:需要设置一个红底白字的Label

attributedLabel = UILabel()let contentStr = NSString(string: "AttributedString")
let attStr = NSMutableAttributedString(string: contentStr as String)
attStr.addAttribute(NSAttributedString.Key.font, value: UIFont.systemFont(ofSize: 20, weight: .medium), range: NSRange(location: 0, length: contentStr.length))
attStr.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor.white, range: NSRange(location: 0, length: contentStr.length))
attStr.addAttribute(NSAttributedString.Key.backgroundColor, value: UIColor.red, range: NSRange(location: 0, length: contentStr.length))
attributedLabel.attributedText = attStr

样式展示:
在这里插入图片描述

文本属性介绍

从上方代码可以看出,文本的属性是通过设置文本字体,文本颜色,文本背景颜色所实现的。所以下面来一一列举一些常用的文本属性及展示效果。

  • 设置文本字体大小和粗细
attStr.addAttribute(NSAttributedString.Key.font, value: UIFont.systemFont(ofSize: 20, weight: .medium), range: NSRange(location: 0, length: contentStr.length))

效果:
在这里插入图片描述

  • 设置文本颜色
attStr.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor.blue, range: NSRange(location: 0, length: contentStr.length))

效果:
在这里插入图片描述

  • 设置背景颜色
attStr.addAttribute(NSAttributedString.Key.backgroundColor, value: UIColor.red, range: NSRange(location: 0, length: contentStr.length))

效果:
在这里插入图片描述

  • 设置下划线
attStr.addAttribute(NSAttributedString.Key.underlineStyle, value: NSUnderlineStyle.single.rawValue, range: NSRange(location: 0, length: contentStr.length))

效果:
在这里插入图片描述

  • 设置下划线颜色

默认下划线颜色与文本颜色相同

attStr.addAttribute(NSAttributedString.Key.underlineColor, value: UIColor.green, range: NSRange(location: 0, length: contentStr.length))

效果:
在这里插入图片描述

  • 拼接文本
    先设置好相关文本属性,然后将其相互连接
let contentStr1 = NSString(string: "Attributed")
let attStr1 = NSMutableAttributedString(string: contentStr1 as String)
attStr1.addAttribute(NSAttributedString.Key.font, value: UIFont.systemFont(ofSize: 20, weight: .medium), range: NSRange(location: 0, length: contentStr1.length))
attStr1.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor.blue, range: NSRange(location: 0, length: contentStr1.length))let contentStr2 = NSString(string: "String")
let attStr2 = NSMutableAttributedString(string: contentStr2 as String)
attStr2.addAttribute(NSAttributedString.Key.font, value: UIFont.systemFont(ofSize: 12, weight: .medium), range: NSRange(location: 0, length: contentStr2.length))
attStr2.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor.green, range: NSRange(location: 0, length: contentStr2.length))attStr1.append(attStr2)attributedLabel.attributedText = attStr1

效果:
在这里插入图片描述

Attributes创建及使用

attributes可以一次性创建多个属性,attributes是一个字典
需求:创建一个红底白字的Label

let contentStr = NSString(string: "AttributedString")
let attStr = NSMutableAttributedString(string: contentStr as String)
attStr.addAttributes([NSAttributedString.Key.font: UIFont.systemFont(ofSize: 20, weight: .regular),NSAttributedString.Key.foregroundColor : UIColor.white,NSAttributedString.Key.backgroundColor : UIColor.red], range: NSRange(location: 0, length: contentStr.length))attributedLabel.attributedText = attStr

效果:
在这里插入图片描述

常用属性方法整合

我将常用的一些文本属性进行整合了一个类

import Foundation
import UIKitpublic struct ZUAttributedString {public enum Font:String {case thin = "PingFangSC-Thin"case light = "PingFangSC-Light"case medium = "PingFangSC-Medium"case regular = "PingFangSC-Regular"}public enum Line{case nonecase midLinecase underLine}public static func attributeString(content:String,font: UIFont,alignment:NSTextAlignment? = NSTextAlignment.center,textColor:UIColor?,backgroundColor: UIColor? = nil,line:Line = .none,lineSpacing:CGFloat = 0) -> NSMutableAttributedString{let contentStr = NSString(string: content)let attStr = NSMutableAttributedString(string: contentStr as String)//set colorif let textColor = textColor {attStr.addAttribute(NSAttributedString.Key.foregroundColor, value: textColor, range: NSRange(location: 0, length: contentStr.length))}if let backgroundColor = backgroundColor {attStr.addAttribute(NSAttributedString.Key.backgroundColor, value: backgroundColor, range: NSRange(location: 0, length: contentStr.length))}let style = NSMutableParagraphStyle()if let align = alignment {style.alignment = align} else {style.alignment = NSTextAlignment.center}if lineSpacing > 0{style.lineSpacing = lineSpacing}attStr.addAttribute(NSAttributedString.Key.paragraphStyle, value: style, range: NSRange(location: 0, length: contentStr.length))attStr.addAttribute(NSAttributedString.Key.font, value: font, range: NSRange(location: 0, length: contentStr.length))switch line{case .none:breakcase .midLine:attStr.addAttribute(NSAttributedString.Key.strikethroughStyle, value: NSUnderlineStyle.single.rawValue, range: NSMakeRange(0, attStr.length))breakcase .underLine:attStr.addAttribute(NSAttributedString.Key.underlineStyle, value: NSUnderlineStyle.single.rawValue, range: NSMakeRange(0, attStr.length))break}return attStr}public static func attributeString(content:String,font:ZUAttributedString.Font,size:CGFloat,alignment:NSTextAlignment? = NSTextAlignment.center,textColor:UIColor?,backgroundColor:UIColor? = nil,line:Line = .none,maximumLineHeight:CGFloat) -> NSMutableAttributedString{let attStr = NSMutableAttributedString(string: content)//set colorif let textColor = textColor {attStr.addAttribute(NSAttributedString.Key.foregroundColor, value: textColor, range: NSRange(location: 0, length: content.count))}if let backgroundColor = backgroundColor {attStr.addAttribute(NSAttributedString.Key.backgroundColor, value: backgroundColor, range: NSRange(location: 0, length: content.count))}let style = NSMutableParagraphStyle()if let align = alignment {style.alignment = align} else {style.alignment = NSTextAlignment.center}attStr.addAttribute(NSAttributedString.Key.paragraphStyle, value: style, range: NSRange(location: 0, length: content.count))//set fontswitch font {case .thin:let font = UIFont(name: ZUAttributedString.Font.thin.rawValue, size: size) ?? UIFont.systemFont(ofSize: size)attStr.addAttribute(NSAttributedString.Key.font, value: font, range: NSRange(location: 0, length: content.count))case .light:let font = UIFont(name: ZUAttributedString.Font.light.rawValue, size: size) ?? UIFont.systemFont(ofSize: size)attStr.addAttribute(NSAttributedString.Key.font, value: font, range: NSRange(location: 0, length: content.count))breakcase .medium:let font = UIFont(name: ZUAttributedString.Font.medium.rawValue, size: size) ?? UIFont.systemFont(ofSize: size)attStr.addAttribute(NSAttributedString.Key.font, value: font, range: NSRange(location: 0, length: content.count))breakcase .regular:let font = UIFont(name: ZUAttributedString.Font.regular.rawValue, size: size) ?? UIFont.systemFont(ofSize: size)attStr.addAttribute(NSAttributedString.Key.font, value: font, range: NSRange(location: 0, length: content.count))break}switch line{case .none:breakcase .midLine:attStr.addAttribute(NSAttributedString.Key.strikethroughStyle, value: NSUnderlineStyle.single.rawValue, range: NSMakeRange(0, attStr.length))breakcase .underLine:attStr.addAttribute(NSAttributedString.Key.underlineStyle, value: NSUnderlineStyle.single.rawValue, range: NSMakeRange(0, attStr.length))break}let paragraphStyle = NSMutableParagraphStyle()paragraphStyle.maximumLineHeight = maximumLineHeight// Line spacing attributeattStr.addAttribute(NSAttributedString.Key.paragraphStyle, value:paragraphStyle, range:NSMakeRange(0, attStr.length))return attStr}
}

方法使用:

let attStr1 = ZUAttributedString.attributeString(content: "Attributed", font: UIFont.systemFont(ofSize: 20, weight: .regular), textColor: UIColor.green, backgroundColor: nil)
let attStr2 = ZUAttributedString.attributeString(content: "String", font: UIFont.systemFont(ofSize: 20, weight: .regular), textColor: UIColor.blue, backgroundColor: nil)attStr1.append(attStr2)

效果:
在这里插入图片描述

所以通过方法整合的方式,可以更加方便便捷的使用AttributedString,并且也可以更好的实现我们目标的文本样式

参考文章

iOS swift 带有attributeString的多行文本label

Swift生成属性文本AttributedString

如果该文章对你有所帮助,可以点赞、收藏并且关注一下! 后续会持续更新更多技术内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/767919.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

11 Games101 - 笔记 - 几何(曲线与曲面)

11 几何(曲线与曲面) 贝塞尔曲线 定义 贝塞尔曲线:由控制点和线段组成的曲线,控制点是可拖动的支点。 如图,蓝色为贝塞尔曲线,p1, p2, p3为控制点,曲线和初始与终止端点相切,并且…

【原理图PCB专题】Cadence 17.4版本导出excel版本坐标文件

坐标文件记录了板卡上每个元件的坐标是生产的基础资料,在PCBA生产时,需要提坐标文件并且务必保证 准确无误。 Cadence导出坐标文件大部分网上的都是txt文件,其格式如下。导出的文件存在没有对应的Title,格式打开混乱等问题。 那么Cadence 17.4版本如何导出有标题、…

分布式系统的基本特性

一般,分布式系统需要支持以下特性: 资源共享 开放性 并发性 可伸缩性 容错性 透明性 下面分别讨论。 容易理解的 资源共享 一旦授权,可以访问环境中的任何资源。 资源:包括硬件(e.g. printer, scanner, camera)、软件&a…

对于组件通信的深刻理解

父组件传递数据给子组件 props传递数据 父组件在子组件的标签上写自定义的属性,属性值是自己的变量,当渲染到子组件时,执行props会找自定义属性,内存了变量的内存,可访问到,写props,会生成vue实例的时候,将props的变量赋给,值找变量内存存入变量.插值语句等可访问.父组件会变…

python综合实战案例-数据分析

Python是进行数据分析的好工具,今天就是借助一个案例给大家进行数据分析讲解。 本例设计一个log.txt⽂件,该文件记录了某个项⽬中某个 api 的调⽤情况,采样时间为每分钟⼀次,包括调⽤次数、响应时间等信息,⼤约18万条数…

如何在 Django 中使用 pyecharts

为项目新建一个目录,将其命名为django_pyecharts_demo, 在终端中切换到这个目录,并创建一个虚拟环境。 python -m venv django_pyecharts激活虚拟环境 django_pyecharts\Scripts\activate要停止使用虚拟环境,可执行命令 deactivate创建并激…

【论文精读】MAE:Masked Autoencoders Are Scalable Vision Learners 带掩码的自动编码器是可扩展的视觉学习器

系列文章目录 【论文精读】Transformer:Attention Is All You Need 【论文精读】BERT:Pre-training of Deep Bidirectional Transformers for Language Understanding 【论文精读】VIT:vision transformer论文 文章目录 系列文章目录一、前言…

24. UE5 RPG制作属性面板(二)

在上一篇中,我们创建属性面板的大部分样式,这一篇里面接着制作。 在这一篇里我们需要有以下几个方面: 在界面增加一个属性按钮。属性按钮增加事件,点击时可以打开属性面板,属性面板打开时无法再次点击按钮。点击属性面…

手撕算法-无重复字符的最长子串

描述 分析 滑动窗口,记录窗口中的所有出现的字符,然后窗口左边界固定,右边界右滑,如果,窗口中不存在新的字符,则右滑成功,否则左边界右滑,直到窗口中不存在右边界的值。 描述感觉不…

Centos7 防火墙iptables?

Centos7 防火墙iptables? 文章目录 Centos7 防火墙iptables?1. 介绍2. firewalld 和 iptables区别3. 区域管理概念区域管理有如下几种不同的初始化区域: 4.iptables的配置1.简述2.基本原理3.iptables传输数据包的过程4. iptables规则表和链5.…

结构体类型详细讲解(附带枚举,联合)

前言: 如果你还对结构体不是很了解,那么本篇文章将会从 为什么存在结构体,结构体的优点,结构体的定义,结构体的使用与结构体的大小依次介绍,同样会附带枚举与联合体 目录 为什么存在结构体: 结构…

【Linux 驱动基础】IMX6ULL LED基础驱动

本机使用的是正点原子的IMX6ULL开发板 # 前置知识 IMX6ULL GPIO控制框图: GPIO控制代码大概分为几个流程:开启时钟、设置IO复用、设置IO属性、配置IO方向、设置IO输出电平,下面以IMX6ULL为例, 1. 开启时钟 参考资料&#xff1a…

深入理解 Docker 镜像

1. Docker 镜像的底层原理 1.1 分层的镜像 以我们的pull 命令为例,在下载的过程中我们可以看到docker的镜像好像是一层一层的在下载。 1.2 UnionFS(联合文件系统) 联合文件系统是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次…

MPI4.1文档翻译(持续更新)

本博客参考官方文档进行介绍,全网仅此一家进行中文翻译,走过路过不要错过。 官方网址:https://www.mpi-forum.org/ 参考文档:https://www.mpi-forum.org/docs/mpi-4.1/mpi41-report.pdf 引用官方4.1文档方法: manu…

linux下使用迅雷的完美办法(网络版免费),其他下载工具

迅雷有自家服务器的支持,因此,其他下载器,可能难以匹敌 ? linux下使用迅雷的完美办法(免费) https://blog.csdn.net/lqrensn/article/details/8853949 网络版 Linux下安装并使用迅雷 https://www.lxlin…

牛客题霸-SQL进阶篇(刷题记录一)

本文基于前段时间学习总结的 MySQL 相关的查询语法,在牛客网找了相应的 MySQL 题目进行练习,以便加强对于 MySQL 查询语法的理解和应用。 由于涉及到的数据库表较多,因此本文不再展示,只提供 MySQL 代码与示例输出。 部分题目因…

化工企业能源在线监测管理系统,智能节能助力生产

化工企业能源消耗量极大,其节能的空间也相对较大,所以需要控制能耗强度,保持更高的能源利用率。 化工企业能源消耗现状 1、能源管理方面 计量能源消耗时,计量器具存在问题,未能对能耗情况实施完全计量,有…

P - Beat

题目分析 1.看数据范围&#xff0c;大概知道dfs能做 2.自0问题开始查找&#xff0c;确保之后每次查找到的问题的困难度均大于上一次 3.遍历所有情况再记录cnt即可 代码 #include <iostream> #include <algorithm> #include <cstdio> #include <cstring&…

蓝桥集训之矩形牛棚

蓝桥集训之矩形牛棚 核心思想&#xff1a;单调队列 模板&#xff1a;Acwing.131.直方图矩形面积首先遍历所有下界 然后确定以该下界为底的直方图 求最大矩形 #include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N 30…

【13】vue2和vue3对比

vite: https://github.com/vitejs/vite 面试题:谈谈你对 vite 的理解,最好对比 webpack 说明 webpack 原理图 vite 原理图 面试题答案: webpack 会先打包,然后启动开发服务器,请求服务器时直接给予打包结果。 而 vite 是直接启动开发服务器,请求哪个模块再对该模块进行实…