gpt4 book ai didi

ios - 不使用换行符定义核心文本段落?

转载 作者:行者123 更新时间:2023-11-28 23:05:28 31 4
gpt4 key购买 nike

我在为 NSAttributedString 中的段落应用适当的顶部和底部间距时遇到了一个小问题。我正在使用这段代码来设置段落属性:

int sf = sizeof(CGFloat);
CTParagraphStyleSetting settings[ParagraphStylesSupported] =
{
{ kCTParagraphStyleSpecifierAlignment, sizeof(QuartzTextAlignment), &style.textAlignment },
{ kCTParagraphStyleSpecifierParagraphSpacingBefore, sf, &marginTop},
{ kCTParagraphStyleSpecifierParagraphSpacing, sf, &marginBot},
{ kCTParagraphStyleSpecifierMinimumLineHeight, sf, &lineHeight},

{ kCTParagraphStyleSpecifierLineSpacing, sf, &lineSpacing},
{ kCTParagraphStyleSpecifierFirstLineHeadIndent, sf, &style.firstLineIndent},

};

CTParagraphStyleRef paragraphStyle = CTParagraphStyleCreate(settings, ParagraphStylesSupported);


[string addAttribute:(NSString*)kCTParagraphStyleAttributeName value:(id)paragraphStyle range:item.range];
CFRelease(paragraphStyle);

正按预期应用文本属性。但是段落对齐几乎没有问题:

  1. 除非在属性范围的开头有换行符\n ,否则段落不会彼此相邻,而是“内联”流动。
  2. 当我添加换行符时,段落会正确地一个接一个地放置,但换行符的行高会添加到“ParagraphSpacing”间距中。
  3. kCTParagraphStyleSpecifierParagraphSpacingBefore 还会影响段落范围内的换行符。

什么 Core Text 布局引擎解释为段落指示器?是属性字符串中的每个换行符吗?

最佳答案

在 Core Text 中,换行符 ( \n ) 结束一个段落。我认为没有办法告诉它使用不同的字符。

如果你将两个换行符放在一行中,那么 Core Text 会表现得好像你有一个空段落,所以它会增加额外的间距。

确保每一段后只有一个换行符。如果您的段落之间仍然有太多空间,您需要为 kCTParagraphStyleSpecifierParagraphSpacingBefore 使用较小的值。或 kCTParagraphStyleSpecifierParagraphSpacing (或两者)。

关于ios - 不使用换行符定义核心文本段落?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9343787/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com