Определите, какая подстрока рисуется с помощью методов NSString draw / size - PullRequest
3 голосов
/ 03 августа 2011

Есть ли способ определить, сколько NSString может быть отображено в данном пространстве?

Я знаю обо всех методах NSString sizeWithFont (например, sizeWithFont: constrainedToSize: lineBreakMode :). Если строка слишком длинная, чтобы уместиться, это не говорит вам, какую часть строки можно было отрендерить.

Например, если у меня есть

NSString *testString = @"The brown dog";

И я звоню:

[testString sizeWithFont:[UIFont systemFontOfSize:17] constrainedtoSize:CGSizeMake(20, 20) lineBreakMode:UILineBreakModeWordWrap];

Я могу получить CGSize = {20,20}. Это говорит мне о том, что струна заняла по крайней мере весь размер, но не говорит мне, закончена ли она или сколько удалось уместить. Если бы только «Коричневый» смог уместиться, я бы хотел это знать.

Может быть, некоторые основные методы Foundation, чтобы сделать это?

1 Ответ

1 голос
/ 03 августа 2011

Один из способов определить, будет ли он урезан, - задать очень большую высоту в ограничительном прямоугольнике.Если высота, которая возвращается, выше, чем высота вашей метки, вы знаете, что она будет усечена.Примерно так:

    // myLabel is a UILabel*
    CGSize labelSize = myLabel.frame.size;
    labelSize.height = 9999;
    CGSize newSize = [newLabel sizeWithFont:[UIFont systemFontOfSize:17.0] 
                            constrainedToSize:labelSize 
                                lineBreakMode:UILineBreakModeWordWrap];
    if( newSize.height > labelSize.height ) {
        // Whoops, too big!
    }

Это скажет вам, будет ли оно усечено, но не подскажет, сколько его будет.Единственный способ, которым я могу думать, это сделать это в цикле, удаляя слово с конца каждый раз, пока оно не подходит.

...