最近因为要调UILabel的行间距时,碰到了个问题,就是当文本时中文时,且只有一行时还是有行间距,由于对 TextKit 和 CoreText 的研究比较少,找了些资料,自己写了比较笨,但也比较简单的方法。具体是给 NSMutableAttributedString 扩展添加两个方法。

代码见下面:

extension NSMutableAttributedString {

/**

根据限制宽度,计算富文本的高度

- parameter width: 限制宽度

- returns: 富文本高度

*/

func height(byLimitWidth width: CGFloat) -> CGFloat {

let constraintRect = CGSize(width: width, height: CGFloat.max)

let boundingBox = self.boundingRectWithSize(constraintRect, options: NSStringDrawingOptions.UsesLineFragmentOrigin, context: nil)

return ceil(boundingBox.height)

}

/**

创建一个带行间距的富文本

- parameter string: 普通字符串

- parameter font: 类型

- parameter limitWidth: 字符串限制宽度

- parameter textColor: 文本颜色,默认黑色

- parameter lineSpaceing: 行间距, 默认0

- parameter alignment: 文本对齐,默认左边

- parameter linebreak: 换行模式,默认以单词区分

- returns: 富文本

*/

convenience init(string: String,

font: UIFont,

limitWidth: CGFloat,

textColor: UIColor = UIColor.blackColor(),

lineSpaceing: CGFloat = 0 ,

alignment:NSTextAlignment = .Left ,

linebreak: NSLineBreakMode = .ByWordWrapping) {

// 普通设置

self.init(string: string)

let attributes = [NSFontAttributeName : font,

NSForegroundColorAttributeName: textColor]

let range = NSRange(location: 0, length: string.characters.count)

self.setAttributes(attributes, range: range)

// 获取自己的高度和一行的高度

let oneLineAText = NSMutableAttributedString(string: "中文", attributes: attributes)

let oneLineHeight = oneLineAText.height(bylimitWidth: 1000)

let selfHeight = self.height(byLimitWidth: limitWidth)

let paragraphStyle = NSMutableParagraphStyle()

paragraphStyle.lineBreakMode = linebreak

paragraphStyle.alignment = alignment

// 当文本不为1行时,增加行边距

paragraphStyle.lineSpacing = selfHeight > oneLineHeight ? lineSpaceing : 0

self.addAttribute(NSParagraphStyleAttributeName, value: paragraphStyle, range: range)

}

}

Java富文本设置行间距,如何解决富文本设置行间距的单行带间距问题相关推荐

  1. android webview 设置cookie时间,解决Android webview设置cookie和cookie丢失的问题

    Android页面嵌套了一个h5,H5页面内部有用户登陆页面,发现h5页面的登陆功能无法使用,一直登陆失败.和web那边商量一会,发现js写入的cookie丢失了.所有需要Android这边在重写写入 ...

  2. 解决富文本tinymce/tinymce-vue 汉化不彻底的问题,上传图片仍然是英文的问题

    解决富文本tinymce/tinymce-vue 汉化不彻底的问题 1.翻译成汉字,然后找个中文在线转换unicode的网站转换 2.找到 zh_CN.js文件,粘贴进去即可

  3. 两文本一图片android,Android富文本编辑器(二):图文混排以及图片上传处理

    对于一个富文本编辑器来说,图文混排是最基本的功能.而从上一篇文章中我们知道图文混排需要使用ImageSpan.下面这段代码摘自我的RichEditText源码: /** * 添加图片 * @param ...

  4. java写到txt乱码_java读取txt文本发生乱码的解决方法

    java读取txt文本发生乱码的解决方法 发布时间:2020-06-25 17:35:58 来源:亿速云 阅读:90 作者:Leah 本篇文章为大家展示了java读取txt文本发生乱码的解决方法,代码 ...

  5. win8.1已阻止java_win8系统下打开java程序时出现应用程序已被安全设置阻止的解决方法...

    今天和大家分享一下win7系统下打开java程序时出现应用程序已被安全设置阻止问题的解决方法,在使用win7系统的过程中经常不知道如何去解决win7系统下打开java程序时出现应用程序已被安全设置阻止 ...

  6. html 页面怎么加载富文本,UILabel加载html富文本

    本文主要解决html标签之外文本属性设置 当APP里面有搜索的需求的时候,产品可能会要求关键字显示特殊颜色或者字体.其中一种可能性是服务器返回的数据是带有html标签的字符串,那么该怎么解决?当标签之 ...

  7. kindle版java核心_深入理解java 7 核心技术与最佳实践-成富[6寸pdf mobi epub kindle版].pdf...

    深入理解java 7 核心技术与最佳实践-成富[6寸pdf mobi epub kindle版].pdf 还剩 50页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预 ...

  8. 用百度富文本编辑器UMeditor实现对html文本的编辑功能,vue中使用UMeditor编辑器

    百度 UMeditor 编辑器资源免费下载地址: https://download.csdn.net/download/WanweI897/67403979 该编辑器没有官方文档,不过百度另一个编辑器 ...

  9. java导出excel表格设置行高,POI导出Excel设置单元格格式

    使用Apache的POI相关API导出Excel设置单元格格式 栗子,一下各个代码之间的变量是通用的,要是在某个代码块中找不到某个变量,则可以向上找寻 准备工作 InputStream = templ ...

最新文章

  1. swift视图容器_如何使用IBDesignable在Swift中创建漂亮的,可重复使用的渐变视图...
  2. [Swift]LeetCode160. 相交链表 | Intersection of Two Linked Lists
  3. 安装完python后、还需要安装什么-初学 Python 需要安装哪些软件?
  4. 《Java 进阶之路》 下--推荐书籍
  5. js纯ajax,自动完成JS类(纯JS, Ajax模式)
  6. 软件项目经理应该具备的心态
  7. 带你了解数仓安全测试的TLS协议
  8. mysql 存储引擎作用_MySQL常用存储引擎功能与用法详解
  9. 车载语音最新黑科技 除了辨“音”还会识“相”
  10. python机器学习案例系列教程——聚类算法总结
  11. Qt编译时报堆空间不足
  12. GO语言开发天天生鲜项目第四天 商品后台管理
  13. 【工控老马】洗衣机PLC程序控制系统设计详解
  14. BootStrap左侧菜单栏
  15. android跑马灯效果横向,Android 通过自定义View实现纵向跑马灯效果
  16. Flutter 2(1),还在等机会
  17. C6678学习-IPC
  18. matlab模拟三体运动_如何写出三体的MATLAB程序-理论分析篇
  19. Linux驱动调试之修改系统时钟中断定位系统僵死问题
  20. 居家养老要智能化?阿里云构建民政大脑,引导民政进入智能化时代

热门文章

  1. 修改element-ui-template 登录接口 api login
  2. 人工智能步入金融领域的主流玩法
  3. Protobuf—简介,优缺点
  4. 数学建模学习笔记(2):TOPSIS方法(优劣解距离法)和熵权法修正
  5. 基于顺序表的图书管理系统(C语言)
  6. 计算机英语教程哪个好,目前国内大学计算机英语教程教学情况分析
  7. 一个傻子玩DNF的感人事迹(不看必后悔)
  8. 基础篇:操作系统、计算机网络、设计模式(二)(附参考答案)
  9. ABAP根据程序去查询透明表
  10. Day9 :面向对象进阶