gpt4 book ai didi

ios - 在 NSLayoutManager 中使用 boundingRectForGlyphRange 计算字边界时如何消除前导空格

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:07:51 26 4
gpt4 key购买 nike

我在 iOS 上将多行字符串分解为单词边界。我的解决方案以 NSLayoutManager 的 boundingRectForGlyphRange 方法为中心。它几乎可以工作,除了每个单词的 rect 向右偏移几个像素。换句话说,NSLayoutManager 似乎在每行上添加了一个前导空格/缩进,我找不到任何方法来覆盖此行为。

我尝试使用 NSLayoutManager.usesFontLeading 以及 NSParagraphStyle.headIndent 但没有任何结果:

 NSLayoutManager* layout = [NSLayoutManager new];
layout.usesFontLeading = NO;
NSMutableParagraphStyle* paragraphStyle = [NSMutableParagraphStyle new];
paragraphStyle.headIndent = paragraphStyle.firstLineHeadIndent = 0;
NSTextStorage* textStorage = [[NSTextStorage alloc] initWithString:self attributes:@{NSFontAttributeName:font, NSParagraphStyleAttributeName:paragraphStyle}];
layout.textStorage = textStorage;
NSTextContainer* textContainer = [[NSTextContainer alloc] initWithSize:size];
[layout addTextContainer:textContainer];

// compute bounding rect for each word range
for (NSValue* wordRangeValue in wordRanges)
{
NSRange wordRange = [wordRangeValue rangeValue];
NSRange wordGlyphRange = [layout glyphRangeForCharacterRange:wordRange actualCharacterRange:NULL];
CGRect wordBounds = [layout boundingRectForGlyphRange:wordGlyphRange inTextContainer:textContainer];
}

enter image description here

屏幕截图:灰色矩形代表标签边界,红色矩形代表每个标签的文本矩形和从上面的 [boundingRectForGlyphRange:] 方法计算出的单词边界。请注意,计算出的单词边界偏离了几个像素。

我也对计算单词边界的其他方法持开放态度,但 boundingRectForGlyphRange 似乎对我的目的来说非常方便。

最佳答案

要忽略左边距,请使用:

textContainer.lineFragmentPadding = 0;

关于ios - 在 NSLayoutManager 中使用 boundingRectForGlyphRange 计算字边界时如何消除前导空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21666258/

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