Как узнать отображаемый текст в UILabel? - PullRequest
3 голосов
/ 19 августа 2010

У меня есть UIView, содержащий два UILabels, для отображения строки. Первый UILabel имеет фиксированный размер, и если строка слишком длинная и не может удерживаться в этом UILabel, я хочу отобразить максимальное количество символов, которое я могу в первом UILabel, и отобразить остальные строка во втором UILabel.

Но чтобы сделать это, я должен знать точную часть строки, отображаемой в первом UILabel, что нелегко из-за случайности строки и разрывов строки.

Итак, есть ли способ получить только текст, отображаемый в первом UILabel, без усеченной части строки?

Ответы [ 2 ]

1 голос
/ 30 ноября 2010
if ([_infoMedia.description length] > 270) {
        NSRange labelLimit = [_infoMedia.description rangeOfString:@" " options:NSCaseInsensitiveSearch range:NSMakeRange(270, (_infoMedia.description.length - 270))];
        _descTop.text = [_infoMedia.description substringToIndex:labelLimit.location];
        _descBottom.text = [_infoMedia.description substringFromIndex:(labelLimit.location+1)];
} else {
            _descTop.text = _infoMedia.description;
            _descBottom.text = @"";
}

Хорошо, это поздний ответ, но, возможно, он может кому-то помочь.Приведенный выше код является приблизительным решением, которое я использовал в своем приложении.

_descTop - моя первая метка, а _descBottom - вторая метка.270 - это постоянный эквивалент чуть меньше среднего максимального количества символов, отображаемых в моем первом ярлыке _descTop.Я рассчитал это вручную, пытаясь использовать много разных строк, возможно, есть лучший способ сделать это, но это сработало неплохо.

Если строка, которую я хочу отобразить (_infoMedia.description), больше 270 символовЯ изолирую первые 270 символов плюс конец следующего слова в строке (путем поиска следующего пробела), в случае, если ограничение в 270 символов обрезает строку в середине слова.Затем я помещаю первую часть строки в свой первый ярлык, а вторую часть - во второй.

Если нет, я помещаю только глобальность строки в первый ярлык.

Я знаю, что это дурацкое решение, но оно сработало, и я не нашел лучшего способа сделать это.

0 голосов
/ 26 октября 2012

Следующий код может помочь вам получить то, что вы хотите !!

//If you want the string displayed in any given rect, use the following code..
@implementation NSString (displayedString)

//font- font of the text to be displayed
//size - Size in which we are displaying the text

-(NSString *) displayedString:(CGSize)size font:(UIFont *)font
{
NSString *written = @"";

int i = 0;
int currentWidth = 0;
NSString *nextSetOfString = @"";

while (1)
{
    NSRange range;
    range.location = i;
    range.length = 1;

    NSString *nextChar = [self substringWithRange:range];
    nextSetOfString = [nextSetOfString stringByAppendingString:nextChar];

    CGSize requiredSize = [nextSetOfString sizeWithFont:font constrainedToSize:CGSizeMake(NSIntegerMax, NSIntegerMax)];
    currentWidth = requiredSize.width;

    if(size.width >= currentWidth && size.height >= requiredSize.height)
    {
        written = [written stringByAppendingString:nextChar];
    }
    else
    {
        break;
    }
    i++;
}


    return written;
}

@end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...