Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS UILabel核心文本行数_Ios_Uilabel_Nsattributedstring_Core Text - Fatal编程技术网

iOS UILabel核心文本行数

iOS UILabel核心文本行数,ios,uilabel,nsattributedstring,core-text,Ios,Uilabel,Nsattributedstring,Core Text,我想创建UILabel的自定义子类,它将知道当前显示的行数。据我所知,UILabel在更改text或font时会自动更改其attributedText属性。所以我试着这样做: label.text=“一些很长的文本” label.font=.systemFont(ofSize:12) guard let attrStr=label.attributedText-else{ 返回 } 打印(属性行(装配宽度:600).计数) ... 扩展NSAttribute字符串{ func行(fittingW

我想创建UILabel的自定义子类,它将知道当前显示的行数。据我所知,UILabel在更改
text
font
时会自动更改其
attributedText
属性。所以我试着这样做:

label.text=“一些很长的文本”
label.font=.systemFont(ofSize:12)
guard let attrStr=label.attributedText-else{
返回
}
打印(属性行(装配宽度:600).计数)
...
扩展NSAttribute字符串{
func行(fittingWidth:CGFloat)->[字符串]{
让attributedString=self
让制框工=
CTFramesetterCreateWithAttributedString(
属性字符串
)
让path=CGPath(rect:CGRect(
x:0,,
y:0,
宽度:宽度,
高度:。最大有限高度
),transform:nil)
设frame=CTFramesetterCreateFrame(
框架制定者,
CFRange(位置:0,长度:0),
路径
无
)
让lines=CTFrameGetLines(帧)作为![CTLine]
var strLines=[String]()
让nsString=attributedString.string作为nsString
排队{
让lineRange=CTLineGetStringRange(直线)
let range=NSMakeRange(lineRange.location,lineRange.length)
strLines.append(nsString.substring(带:range))
}
返回斯特林
}
}

但问题是,当我使用标签的
attributedText
值时,
行(fittingWidth:)
对于任何配件宽度总是只返回一行。在我自己构造
NSAttributedString
的同时(通过使用
text
font
属性)
行(fittingWidth:)
返回正确的行数。内置的
attributeText
value有什么问题?

我肯定看到了
CTFrameGetLines()
的一些怪癖。您是否需要处理可能具有复杂的
属性文本的标签?如中所示,多个大小和段落属性的多个字体?或者只是简单的-本质上是“纯文本”-标签?@DonMag,大多数情况下,我会使用单字体的“纯文本”标签,因此从
text
font
属性生成
nsattributestring
是可以接受的。但我只是想让我的代码具有通用性,能够处理“多种大小的多种字体和段落属性”。好吧,通过一些快速测试,它看起来更复杂。我找到了一种从纯文本
UILabel
中“自动”转换的方法,以获得准确的行数。。。如果您在标签中设置了
.attributedText
(与设置
.text
相反),
CTFrameGetLines
是可靠的,除非标签中有多个字体/大小。您可能想看看这个:--似乎工作得很好,包括对内联图像的支持。