gpt4 book ai didi

ios - UILineBreakModeWordWrap(或 NSLineBreakByWordWrapping)停止将单词拆分为 2 行

转载 作者:行者123 更新时间:2023-12-01 21:50:05 25 4
gpt4 key购买 nike

我正在尝试计算出适合定义矩形的字符串的最大字体大小。现在我发现了许多其他帖子说明了如何做到这一点,包括:

Resizing UILabel to fit with Word Wrap

Resize CATextLayer to fit text on iOS

iPhone UILabel sizeWithFont:

Which characters does NSLineBreakByWordWrapping break on?

现在这些都很棒,告诉我如何获得最大的字体大小。然而,当使用带有换行符(UILineBreakModeWordWrap 或 NSLineBreakByWordWrapping)的方法“sizeWithFont:constrainedToSize:lineBreakMode:”时,它实际上是将大单词分割成多行。

UILineBreakModeWordWrap(或 NSLineBreakByWordWrapping)不是意味着单词不会“拆分”超过一行。我很高兴多个单词出现在多行上,但是我不这样做不希望一个单词被分成两个。如果 UILineBreakModeWordWrap 不能做到这一点,还有其他方法可以吗?

下面是我用来确定最大可能字体大小的代码:(文本是@“australia”)

-(UIFont *)GetFontSizeForText:(NSString *)text inRect:(CGRect)rect {
BOOL notFit = YES;
CGSize textSize;
CGFloat tmpFontSize = TEMPLATE_DEFAULT_FONT_SIZE;
UIFont *tmpFont;

CGSize maxSize = CGSizeMake(rect.size.width, MAXFLOAT);

while (notFit) {
tmpFont = [UIFont fontWithName:TEMPLATE_DEFAULT_FONT_NAME size:tmpFontSize];
textSize = [text sizeWithFont:tmpFont constrainedToSize:maxSize lineBreakMode:UILineBreakModeWordWrap];

if (textSize.height > rect.size.height) {
tmpFontSize -= 1.0;
if (tmpFontSize < 2.0) {
break;
}
} else {
notFit = NO;
}
}

return tmpFont;
}

下面是一个图像链接,显示使用上述函数计算字体大小时会发生什么。 “黄色”盒子是最大的尺寸。紫色框是使用计算出的字体大小渲染的实际 CATextLayer。这些框上方的“澳大利亚”文本是一个 UILabel,我将其与界面生成器以相同的字体大小放置在那里。

http://www.connstructstudios.com.au/externalimages/multilines.png

最佳答案

“换行发生在单词边界处,除非单词本身无法容纳在一行中。”

因此,如果单个单词太长,可以将其拆分。

要解决这个问题,您可以用单词分隔字符串,对每个组件使用 - (CGSize)sizeWithFont:(UIFont *)font; 并检查宽度是否小于最大宽度。

关于ios - UILineBreakModeWordWrap(或 NSLineBreakByWordWrapping)停止将单词拆分为 2 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16975440/

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