Java富文本设置行间距,如何解决富文本设置行间距的单行带间距问题
最近因为要调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富文本设置行间距,如何解决富文本设置行间距的单行带间距问题相关推荐
- android webview 设置cookie时间,解决Android webview设置cookie和cookie丢失的问题
Android页面嵌套了一个h5,H5页面内部有用户登陆页面,发现h5页面的登陆功能无法使用,一直登陆失败.和web那边商量一会,发现js写入的cookie丢失了.所有需要Android这边在重写写入 ...
- 解决富文本tinymce/tinymce-vue 汉化不彻底的问题,上传图片仍然是英文的问题
解决富文本tinymce/tinymce-vue 汉化不彻底的问题 1.翻译成汉字,然后找个中文在线转换unicode的网站转换 2.找到 zh_CN.js文件,粘贴进去即可
- 两文本一图片android,Android富文本编辑器(二):图文混排以及图片上传处理
对于一个富文本编辑器来说,图文混排是最基本的功能.而从上一篇文章中我们知道图文混排需要使用ImageSpan.下面这段代码摘自我的RichEditText源码: /** * 添加图片 * @param ...
- java写到txt乱码_java读取txt文本发生乱码的解决方法
java读取txt文本发生乱码的解决方法 发布时间:2020-06-25 17:35:58 来源:亿速云 阅读:90 作者:Leah 本篇文章为大家展示了java读取txt文本发生乱码的解决方法,代码 ...
- win8.1已阻止java_win8系统下打开java程序时出现应用程序已被安全设置阻止的解决方法...
今天和大家分享一下win7系统下打开java程序时出现应用程序已被安全设置阻止问题的解决方法,在使用win7系统的过程中经常不知道如何去解决win7系统下打开java程序时出现应用程序已被安全设置阻止 ...
- html 页面怎么加载富文本,UILabel加载html富文本
本文主要解决html标签之外文本属性设置 当APP里面有搜索的需求的时候,产品可能会要求关键字显示特殊颜色或者字体.其中一种可能性是服务器返回的数据是带有html标签的字符串,那么该怎么解决?当标签之 ...
- kindle版java核心_深入理解java 7 核心技术与最佳实践-成富[6寸pdf mobi epub kindle版].pdf...
深入理解java 7 核心技术与最佳实践-成富[6寸pdf mobi epub kindle版].pdf 还剩 50页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预 ...
- 用百度富文本编辑器UMeditor实现对html文本的编辑功能,vue中使用UMeditor编辑器
百度 UMeditor 编辑器资源免费下载地址: https://download.csdn.net/download/WanweI897/67403979 该编辑器没有官方文档,不过百度另一个编辑器 ...
- java导出excel表格设置行高,POI导出Excel设置单元格格式
使用Apache的POI相关API导出Excel设置单元格格式 栗子,一下各个代码之间的变量是通用的,要是在某个代码块中找不到某个变量,则可以向上找寻 准备工作 InputStream = templ ...
最新文章
- swift视图容器_如何使用IBDesignable在Swift中创建漂亮的,可重复使用的渐变视图...
- [Swift]LeetCode160. 相交链表 | Intersection of Two Linked Lists
- 安装完python后、还需要安装什么-初学 Python 需要安装哪些软件?
- 《Java 进阶之路》 下--推荐书籍
- js纯ajax,自动完成JS类(纯JS, Ajax模式)
- 软件项目经理应该具备的心态
- 带你了解数仓安全测试的TLS协议
- mysql 存储引擎作用_MySQL常用存储引擎功能与用法详解
- 车载语音最新黑科技 除了辨“音”还会识“相”
- python机器学习案例系列教程——聚类算法总结
- Qt编译时报堆空间不足
- GO语言开发天天生鲜项目第四天 商品后台管理
- 【工控老马】洗衣机PLC程序控制系统设计详解
- BootStrap左侧菜单栏
- android跑马灯效果横向,Android 通过自定义View实现纵向跑马灯效果
- Flutter 2(1),还在等机会
- C6678学习-IPC
- matlab模拟三体运动_如何写出三体的MATLAB程序-理论分析篇
- Linux驱动调试之修改系统时钟中断定位系统僵死问题
- 居家养老要智能化?阿里云构建民政大脑,引导民政进入智能化时代