2017-02-06 2 views
2

Ich gebe eine NSAttributedString mit zwei Teilen Text, die erste ist nur ein einfacher Textkörper, unten gezeigt, und danach ist ein Beispielblock des Codes, auch unten gezeigt (hinzugefügt ein Teiler, um einfacher zu zeigen).Warum hat der zweite Textblock eine so viel höhere Zeilenhöhe als der erste, obwohl NSAttributedString nicht übereinstimmt?

Wie Sie sehen können, hat der Code-Block deutlich höher Linien als die normalen Textkörper:

enter image description here

Allerdings gibt es keine fremden Zeilenumbrüche oder etwas dergleichen. Dies ist der attributedString.string Wert für sie:

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

    return false 
} 

Es gibt beide in der gleichen NSAttributedString, und wenn ich die NSAttributedString drucken kann ich keine Unterschiede erkennen, dass dies berücksichtigen würde:

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"; 
} 

Ich kann nicht für das Leben von mir entdeckt, was das verursachen würde. Es wird einfach in einer UITextView angezeigt, aber warum sind die Codezeilen so viel größer?

+0

Können Sie testen, indem Sie zweimal den Lorem-ipsum-Text verwenden, aber einen mit der Schriftart SanFrancisco (die Sie bereits verwendet haben) und danach mit Menlo-Regular? Ich frage mich, ob die Schriftart keine zusätzlichen weißen Bereiche gibt. – Larme

+0

@Larme, ja, macht die Schriftart die gleiche liefert das gleiche Ergebnis. – christianselig

Antwort

2

Der Grund dafür, dass der Code so weit ausgebreitet ist, liegt an der NSParagraphStyle.paragraphSpacing. Da jede der Codezeilen mit einem Zeilenumbruch endet, wird jede Zeile als eigener Absatz interpretiert, der das Leerzeichen berücksichtigt.

Verwandte Themen