Phi*_*ann 2 whitespace objective-c justify core-text ios
我在图像周围浮动一些文本,并使用CoreText和kCTJustifiedTextAlignment显示正确的文本 - 但是对于较大的图像,较小的文本区域和较少的空白CoreText不仅扩大了空白,而且扩大了字母之间的边距.
看这里:

这有时看起来非常糟糕,所以我搜索了一些替代方案或解决方法,但只是通过在每个空格后添加更多的空格以匹配宽度和使用来找到自己做的建议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;
}
Run Code Online (Sandbox Code Playgroud)
因此,我们CTLine根据CTTypesetter建议创建一个常规.然后我们应用一些规则(只有一个单词?不是段落的结尾?无论如何.)如果我们通过,那么我们创建一个新的,合理的行.(我不确定为什么CTTypesetter不能自己创建一条合理的线.)
有关此的完整示例,请参阅PinchText.它比你需要的要复杂得多,但它展示了如何使用大量注释完成所有布局.
| 归档时间: |
|
| 查看次数: |
1032 次 |
| 最近记录: |