UILineBreakModeWordWrap(或NSLineBreakByWordWrapping)停止分割2行的单词

时间:2013-06-07 02:43:54

标签: ios nsstring uifont

大家好,谢谢你的帮助。

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

Resizing UILabel to fit with Word Wrap

Resize CATextLayer to fit text on iOS

iPhone UILabel sizeWithFont:

Which characters does NSLineBreakByWordWrapping break on?

现在这些很棒,告诉我如何获得最大的字体大小。但是,当使用方法“sizeWithFont:constrainedToSize:lineBreakMode:”并使用换行符(UILineBreakModeWordWrap或NSLineBreakByWordWrapping)时,它实际上是在多行中拆分大字。

UILineBreakModeWordWrap(或NSLineBreakByWordWrapping)是不是意味着单词不会在一行以上“拆分”。我很高兴多行上有多个单词,但是我不喜欢我想要一个单词分成两个。如果UILineBreakModeWordWrap无法做到这一点,还有其他什么可以吗?

以下是我用来确定最大字体大小的代码:(文字是@“澳大利亚”)

-(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。这些盒子上面的'AUSTRALIA'文本是一个UILabel,我在那里使用相同字体大小的界面构建器。

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

再次感谢。

1 个答案:

答案 0 :(得分:2)

“包装发生在单词边界,除非单词本身不适合单行。”

因此,如果单词太长就可以拆分。

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