问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

TextKit探究

发布网友 发布时间:2023-07-06 23:25

我来回答

1个回答

热心网友 时间:2024-10-22 23:43

先来看看效果图:

以前都是中文模式,label显示的内容都比较短,可以一行显示完全,所以实现方式就比较多了,可以使用3个label,分别显示前、中、后三段内容,然后分别配置各个label的属性。
但是!,后来需求变动,要添加英文模式,这里就能看的,英文模式下,要显示的内容就大大加长了。(也就是说一行不能完全显示)
这里就要使内容高度宽度自适应了
这也就是将要提到的 思路2

因为UITextview已经默认将内容拼合起来, 而且它存在一个 attributedText 属性

所以,我们可以根据 range 或者根据正则来配置中间用户键入的文字属性。
自定义view配置各个控件就不贴了。
这里主要就是一个宽度的计算问题:

还有一点要注意:
我发现一般来说UITextview都会有上下左右四个方向的边距(大约为8px),若想要修改UITextview中内容的四个边距,一般来说我们都会设置 contentInset 属性,但是,在textview中好像并不太好使,看了下文档,里边有一个属性

可以看到,此属性就是修改textview文本内容的containerView的内边距的
设置一下即可:

注:若textview的约束没设置正确,设置textContainerInset也有可能会显示不正常

以上就能达到上图那样的效果

TextKit 是苹果提供的基于 Core Text 的渲染带文字的诸如 UILaebl , UITextField , UITextView 等控件的高级API。

相当于MVC中的model,用来提供要展示的数据。
而且NSTextStorage是NSMutableAttributedString的子类,所以配置的时候,可以添加一些文字需要展示的属性。
平时我们在使用的时候,可以直接使用此类的实例,但是,如果需要自定义的时候,要继承于他,此时,我们要额外实现四个方法:

可以看到,我们要额外实现:四个方法,来配置string,然后NSTextStorage会调用 edited:range:changeInLength 方法

可以看到,上面的方法会记录改变的信息,也就是说string的每一次改变, NSTextStorage都会调用此方法。然后 edited:range:changeInLength: 方法也会自动调用 beginEdiging 方法,传递文字变化状态,
(也可以使用 beginEditing/endEditing 方法包裹住要处理的数据,在endEditing方法调用之后,会自动调用 processEditing 传递变化。)
然后 processEditing ,会调用NSLayoutManager的 textStorage:edited:range:changeInLength:invalidatedRange: 方法把textStorage传过来的字符串绘制出图形

NSLayoutManager则相当于MVC中的Controller.用来协调model的数据和展示view(UITextView,UITextfield,UILabel etc.)之间的关系。

这里有一点需要注意:
如果我们自己要绘制文字的时候,需要先绘制背景,然后再绘制文字。
常用的方法有几大类:

1). 生成类:可以生成图形和布局

2). 获取类:获取图形、布局的信息

3). 绘图类, 按照图形布局信息,绘制文字

该类是辅助类,辅助view生成盛放NSLayoutManager类生成的图形。
如:
NSTextview 中的

该类可以设置以下属性:
size :展示区域的大小
exclusionPaths :排除展示区域的路径,是一个内部盛放UIBezierPath对象的数组
lineBreakMode : 换行模式
lineFragmentPadding :线段边距

以及提供了一个方法,来设置以上提及的一些属性

我们可以通过创建NSTextContainer的子类,然后重写该方法,来定义那些文字展示在不规则图形中的情况

总结一下;整体的绘制流程如下:

Using Text Kit to Draw and Manage Text
TextKit Best Practices WWDC 2018
TextKit Best Practices WWDC 2018中文图解
Bullet list on iOS with TextKit
Getting to Know TextKit
String Rendering
How to fit text in a circle in UILabel
初识 TextKit

TextKit探究

总结一下;整体的绘制流程如下:Using Text Kit to Draw and Manage Text TextKit Best Practices WWDC 2018 TextKit Best Practices WWDC 2018中文图解 Bullet list on iOS with TextKit Getting to Know TextKit String Rendering How to fit text in a circle in UILabel 初识 ...

zigbee的特征是什么?

ZigBee作为一项新型的无线通信技术,其具有传统网络通信技术所不可比拟的优势,既能够实现近距离操作,又可降低能源的消耗。又如,相较于蓝牙等无线通信技术,ZigBee无线通信技术可有效降低使用成本, 即便数据处理的速率并不高,然而,值得肯定...

探究与研究 TextEditor innerText Text me 我的探究 探究结果 探究问题 探究过程 探究什么意思
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
2024年小麦价格多少钱一斤 酸甜口味的凉拌菜如何制作? 小麦价格什么时候涨 明年小麦还会继续上涨吗 怎么做家常韭菜烧豆腐? 家常烧豆腐块怎么做? 单核CPU512内存 加内存会让电脑运行快吗 我的电脑配置 CPU AMD速龙 双核 3600+ 内存 512MB 显卡64M 什么情况... 我的cpu是AMD Sempron 3000+的 内存是512M 显示卡是 Radeon X300/X550/... 我的电脑是双核CPU 2G内存 512独显 怎样才能加快电脑运行速度 手机水下拍摄相机推荐哪个 中信出版股票历史高点?中信出版股票历史行情图?中信出版为何一直下跌... 中信出版股票历史?中信出版股票近两年行情?中信出版年后会跌多少?_百... 何选择碳粉,怎么选购理光1356.pro1357ex 绯雨骑士团彩虹币怎么买 绯雨骑士团攻略 禁雨扭蛋在哪 有谁可以告诉电信爱动漫是什么吗? 有没有一天学2个单词的软件 朗科移动硬盘耐用吗? 2016年河北执业药师报名条件是什么? 充电鞋垫中锂电池和充电宝哪个好 帮忙写一篇英语作文 高三水平 discourse 是语言学的一个分支吗 是哪个分支里的 还或者是其他什么领域... 如何选购遥控插座 如何计算镀锌管的理论重量? 20多岁应该买哪些保险? 印在心底的老照片-叙事作文700字 如何让我的老照片更有深意? 追的女孩怕受伤拒绝我 脚部烫伤要多久才能痊愈 对节白蜡繁育方法 白蜡盆景嫁接大枝条好吗 ...怎么加回?无意中删掉个好友,没有手机号码没有没有_百度... 微信好友误删,现在不知道也没有电话号码怎么找回? excel如何分级显示? 花木生根嫁接方法花木生根嫁接方法有哪些 《白色月光》未播先火,是因为剧情,还是因为主角? 花卉快速生根的方法有哪些 微信好友误删,现在不知道也没有电话号码怎么找回? ...杀毒垃圾清理?我打开电脑后老是在后台自动下载乱七八招的东西。搞... 有什么水下摄影机品牌好 渔魔人摄像头不显示 候补妈妈 为什么喜欢狼的人那么少啊?大神们喜欢狼吗? ...女主小时候目睹了父母被杀的经过 然后女主和弟弟分别被别人领养 这 ... 户口本多长时间能办出来啊 落户后户口本多久下来 ...怎么加回?无意中删掉个好友,没有手机号码没有没有_百度... 微信好友误删,现在不知道也没有电话号码怎么找回?