Ios 为什么第二个文本块的行高要比第一个文本块高很多,尽管NSAttributedString不同意?

Ios 为什么第二个文本块的行高要比第一个文本块高很多,尽管NSAttributedString不同意?,ios,objective-c,uitextview,nsattributedstring,textkit,Ios,Objective C,Uitextview,Nsattributedstring,Textkit,我得到了一个NSAttributedString,其中包含两部分文本,第一部分只是一个纯文本体,如下所示,之后是一个示例代码块,如下所示(添加了一个分隔符以更容易显示) 如您所见,代码块的行数明显高于正常文本体: 然而,没有无关的新词或类似的东西。这是它的attributedString.string值: func sampleFunction() -> Bool { if 4 + 4 == 8 { return true } return fa

我得到了一个
NSAttributedString
,其中包含两部分文本,第一部分只是一个纯文本体,如下所示,之后是一个示例代码块,如下所示(添加了一个分隔符以更容易显示)

如您所见,代码块的行数明显高于正常文本体:

然而,没有无关的新词或类似的东西。这是它的
attributedString.string
值:

func sampleFunction() -> Bool {
    if 4 + 4 == 8 {
        return true
    }

    return false
}
在相同的
NSAttributedString
中都有,当我打印
NSAttributedString
时,我发现没有任何差异可以解释这一点:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed lacinia, ex ut placerat lobortis, nunc metus convallis nibh, a laoreet velit nisi non felis. Ut vitae quam in ipsum vestibulum gravida et ut nisl.
Vestibulum vel enim vitae nunc dignissim posuere. Morbi sed ipsum odio. Cras laoreet nec ligula ac lobortis. Curabitur a tristique nulla. Proin et massa purus. Vestibulum et volutpat mi.
{
    NSColor = "UIExtendedGrayColorSpace 0 1";
    NSFont = "<UICTFont: 0x7fd019e1b9f0> font-family: \".SFUIText\"; font-weight: normal; font-style: normal; font-size: 15.00pt";
    NSParagraphStyle = "Alignment 4, LineSpacing 0, ParagraphSpacing 15, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 0/0, LineHeightMultiple 1, LineBreakMode 0, Tabs (\n    28L,\n    56L,\n    84L,\n    112L,\n    140L,\n    168L,\n    196L,\n    224L,\n    252L,\n    280L,\n    308L,\n    336L\n), DefaultTabInterval 36, Blocks (\n), Lists (\n), BaseWritingDirection -1, HyphenationFactor 0, TighteningForTruncation NO, HeaderLevel 0";
}func sampleFunction() -> Bool {
    if 4 + 4 == 8 {
        return true
    }

    return false
}{
    NSColor = "UIExtendedGrayColorSpace 0 1";
    NSFont = "<UICTFont: 0x7fd019f128f0> font-family: \"Menlo-Regular\"; font-weight: normal; font-style: normal; font-size: 15.00pt";
    NSParagraphStyle = "Alignment 4, LineSpacing 0, ParagraphSpacing 15, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 0/0, LineHeightMultiple 1, LineBreakMode 0, Tabs (\n    28L,\n    56L,\n    84L,\n    112L,\n    140L,\n    168L,\n    196L,\n    224L,\n    252L,\n    280L,\n    308L,\n    336L\n), DefaultTabInterval 36, Blocks (\n), Lists (\n), BaseWritingDirection -1, HyphenationFactor 0, TighteningForTruncation NO, HeaderLevel 0";
}
Lorem ipsum door sit amet,一位杰出的领导者。塞德·拉西尼亚(Sed lacinia)是一只非猫科动物,它的前身是一只老鼠lobortis,它的名字叫Nenc metus convallis nibh。孕妇的同侧前庭和nisl的生命质量。
前庭是波苏尔的显贵。病态为同侧。拉奥里特·尼古拉·洛博蒂斯。库拉比图尔是一个三色无尾鸟。普罗因和马萨·普鲁斯。前庭和蜗壳。
{
NSColor=“UIExtendedGrayColorSpace 0 1”;
NSFont=“font-family:\”.SFUIText\“字体重量:正常;字体样式:正常;字体大小:15.00pt”;
NSParagraphStyle=“对齐4,行距0,段落间距15,段落间距0之前,首缩进0,尾缩进0,第一行首缩进0,线宽0/0,线宽倍数1,换行模式0,制表符(\n 28L、\n 56L、\n 84L、\n 112L、\n 140L、\n 168L、\n 196L、\n 224L、\n 252L、\n 280L、\n 308L、\n 336L\n),DefaultTabInterval 36,Blocks(\n),List(\n),BaseWritingDirection-1,连字号因子0,拧紧位置编号,表头级别0”;
}func sampleFunction()->Bool{
如果4+4==8{
返回真值
}
返回错误
}{
NSColor=“UIExtendedGrayColorSpace 0 1”;
NSFont=“font-family:\“Menlo-Regular\”字体大小:正常;字体样式:正常;字体大小:15.00pt”;
NSParagraphStyle=“对齐4,行距0,段落间距15,段落间距0之前,首缩进0,尾缩进0,第一行首缩进0,线宽0/0,线宽倍数1,换行模式0,制表符(\n 28L、\n 56L、\n 84L、\n 112L、\n 140L、\n 168L、\n 196L、\n 224L、\n 252L、\n 280L、\n 308L、\n 336L\n),DefaultTabInterval 36,Blocks(\n),List(\n),BaseWritingDirection-1,连字号因子0,拧紧位置编号,表头级别0”;
}

我一辈子都无法发现是什么导致了这一切。它只是显示在一个
UITextView
中,但为什么代码行那么高?

代码文本看起来如此分散的原因是因为
NSParagraphStyle.paragraphspace
。由于每一行代码都以换行符结尾,因此每一行都被解释为它自己的段落,这就占用了空间

您是否可以使用两次Lorem ipsum文本进行测试,但将其中一次设置为SanFrancisco字体(您已经使用的字体),然后使用Menlo Regular字体进行测试?我想知道它的字体是否没有额外的白色区域。@Larme,是的,使字体相同可以提供相同的结果。