相关疑难解决方法(0)

调整CATextLayer的大小以适合iOS上的文本

到目前为止,我的所有研究似乎表明不可能准确地做到这一点.我在一开始就可以选择的唯一两个选项是:

a)使用CATextLayer的布局管理器 - 从4.0版开始在iOS上不可用

b)使用sizeWithFont:constrainedToSize:lineBreakMode:并根据此处返回的大小调整CATextLayer的帧.

选项(b)是最简单的方法,应该有效.毕竟,它与UILabels完美配合.但是当我将相同的帧计算应用于CATextLayer时,框架总是比预期或需要的要大一些.

事实证明,CATextLayers和UILabels中的行间距(对于相同的字体和大小)是不同的.因此,sizeWithFont(其行间距计算将与UILabels的行间距计算匹配)不会返回CATextLayers的预期大小.

通过使用UILabel打印相同的文本,与CATextLayer相比,并比较结果,进一步证明了这一点.第一行中的文本完全重叠(它是相同的字体),但CATextLayer中的行间距比UILabel略短.(对不起,我现在无法上传截图,因为我已经包含机密数据,我目前没有时间制作一个示例项目来获取干净的截图.我稍后会为后人上传它们,当时我有时间)

这是一个奇怪的区别,但我认为可以通过为我在那里使用的NSAttributedString指定适当的属性来调整CATextLayer中的间距,但似乎并非如此.查看CFStringAttributes.h我找不到可能与行间距相关的单个属性.

底线:

因此,在需要适合其文本的图层的情况下,似乎无法在iOS上使用CATextLayer.我是对的,还是我错过了什么?

PS:

  1. 我想使用CATextLayer和NSAttributedString的原因是因为要显示的字符串在不同点上的颜色不同.我想我必须一如既往地回去手工绘制字符串......当然总是可以选择从sizeWithFont中获取结果以获得正确的行高.

  2. 滥用"代码"标签稍微有点使帖子更具可读性.

  3. 我无法使用'CATextLayer'标记帖子 - 令人惊讶的是目前还没有这样的标签.如果有足够声誉的人碰到这篇文章,请相应标记.

sizewithfont ios4 catextlayer

21
推荐指数
1
解决办法
9315
查看次数

标签 统计

catextlayer ×1

ios4 ×1

sizewithfont ×1