在两个UILabel之间拆分一串文本以包裹图像

时间:2012-08-22 09:15:16

标签: objective-c ios nsarray uilabel wrapping

我正在尝试在两个UILabel之间分隔一长串文本以包裹图像。我重新使用并修改了以前开发人员留下的一些代码,这个代码位于......

之下

字符串(序号字,1到20):

NSString *sampleString = @"One two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty. One two three four five six seven eight nine ten. Eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty.";

分裂方法......

-(void)seperateTextIntoLabels:(NSString*) text
{
    // Create array of words from our string
    NSArray *words = [text componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" "]];

    //Data storage for loop
    NSMutableString *text1 = [[NSMutableString alloc] init];
    NSMutableString *text2 = [[NSMutableString alloc] init];

    for(NSString *word in words)
    {
        CGSize ss1 = [[NSString stringWithFormat:@"%@ %@",text1,word] sizeWithFont:descriptionLabel.font constrainedToSize:CGSizeMake(descriptionLabel.frame.size.width, 9999) lineBreakMode:descriptionLabel.lineBreakMode];

        if(ss1.height > descriptionLabel.frame.size.height || ss1.width > descriptionLabel.frame.size.width)
        {
            if( [text2 length]>0)
            {
                [text2 appendString: @" "];
            }
            [text2 appendString: word];
        }
        else {
            if( [text1 length]>0)
            {
                [text1 appendString: @" "];
            }
            [text1 appendString:word];
        }

    }
    descriptionLabel.text = text1;
    descriptionLabelTwo.text = text2;

    [descriptionLabel sizeToFit];
    [descriptionLabelTwo sizeToFit];

}

它或多或少都像我期望的那样,除非它在切换发生时感到困惑。

enter image description here

注意标签1中的最后一个单词'One'是错位的。从第二个标签的中途也遗漏了这个词。除了这个问题,它似乎工作正常。

关于这里发生了什么的任何想法?

有没有替代解决方案?请注意,我宁愿不使用UIWebView(主要是因为屏幕渲染的延迟)。

1 个答案:

答案 0 :(得分:2)

这是你的问题。

如果字符串适合第一个标签,那么您正在检查字符串中的每个单词,如果它不适合。它进入第二个。直到“十二”,这一切都符合第一个标签。但是你希望其余的字符串落入第二个标签,对吗?

在您的支票中,即使您将分割到第二个标签之后,您仍然会检查每个单词是否也适合第一个标签。 “One”是仍然适合第一个标签的第一个单词,因此将其放在那里,并继续将其他单词放在第二个标签中。

要修复这个“奇怪的”分裂问题,你可以自己做一个布尔值,当你将分割成第二个标签时转为“是”(或者你喜欢的是真的),并确保检查该布尔值是否为打开并检查尺寸。

我希望现在这一切对你都有意义。

祝你好运。