2

画像をラップするために、2 つの UILabels の間で長いテキストを分離しようとしています。このプロジェクトで以前の開発者が残したいくつかのコードを再利用して適応させました...

文字列 (連番単語、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];

}

切り替えが発生した時点で混乱していることを除いて、期待どおりに多かれ少なかれ機能します。

ここに画像の説明を入力

ラベル 1 の最後の単語「One」が間違って配置されていることに注意してください。この単語も、2 番目のラベルの途中で欠落しています。この問題以外は、問題なく動作するようです。

ここで何が起こっているかについてのアイデアはありますか?

これに対する代替ソリューションはありますか? UIWebView を使用したくないことに注意してください (主に画面上のレンダリングの遅延のため)。

4

1 に答える 1

2

ここに問題があります。

文字列内のすべての単語が最初のラベルに収まるかどうか、次に収まらないかどうかをチェックしています。2番目に入ります。「12」までは、すべて最初のラベルに収まります。しかし、残りの文字列を2番目のラベルに分類する必要がありますか?

チェックでは、2番目のラベルに分割した後でも、すべての単語が最初のラベルにも適合するかどうかをチェックし続けます。「One」は、最初のラベルにまだ収まる最初の単語であり、したがってそこに配置され、他の単語は2番目のラベルに配置され続けます。

この「奇妙な」分割の問題を修正するには、2番目のラベルに分割したときに「YES」(または必要に応じてtrue)に変わるブール値を作成し、そのブール値が次のようにオンになっているかどうかを確認します。サイズをチェックするだけでなく。

これがすべてあなたにとって理にかなっていることを願っています。

幸運を。

于 2012-08-22T09:25:31.937 に答える