gpt4 book ai didi

iOS:更好地证明 CoreText

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:30:59 24 4
gpt4 key购买 nike

我使用 CoreTextkCTJustifiedTextAlignment 在图像周围 float 一些文本以显示对齐的文本 - 但是图像更大,文本区域更小,空白更少 CoreText 不仅加宽了空格,还加宽了字母之间的边距。

看这里: badly justified

这有时看起来真的很糟糕,所以我搜索了一些替代方案或变通方法,但只找到建议自己完成,方法是在每个空格后添加更多空格以匹配宽度并使用 kCTLeftTextAlignment。这听起来像是有很多圈套要处理,所以我想,我想在这里问一下,也许有人知道如何处理这个问题。

最佳答案

这里的基本问题是“那么你想要什么?”另一个明显的答案是“充分证明,除非……我要制定一些规则,就像只有一个词一样。”

如果您想要那种控制,那么您需要下降到 CTLine 级别并仅在您需要时才创建对齐线。假设您已经对 CoreText 有所了解,那么这段代码应该很有意义。仅当它不是段落的最后一行时才对齐该行。

  CFIndex lineCharacterCount = CTTypesetterSuggestLineBreak(self.typesetter, startIndex, boundsWidth);
CTLineRef line = CTTypesetterCreateLine(self.typesetter, CFRangeMake(startIndex, lineCharacterCount));

// Fetch the typographic bounds
CTLineGetTypographicBounds(line, &(*ascent), &(*descent), &(*leading));

// Full-justify all but last line of paragraphs
NSString *string = self.attributedString.string;
NSUInteger endingLocation = startIndex + lineCharacterCount;
if (endingLocation >= string.length || [string characterAtIndex:endingLocation] != '\n') {
CTLineRef justifiedLine = CTLineCreateJustifiedLine(line, 1.0, boundsWidth);
CFRelease(line);
line = justifiedLine;
}

因此我们根据CTTypesetter 建议创建一个普通的CTLine。然后我们应用一些规则(只有一个词?不是段落的结尾?随便。)如果我们通过,那么我们创建一个新的,对齐的行。 (我不确定为什么 CTTypesetter 不能自己创建对齐线。)

有关此的完整示例,请参阅 PinchText .它比您需要的复杂得多,但它展示了如何使用大量注释进行所有布局。

关于iOS:更好地证明 CoreText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14872749/

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