Сжатие пользовательского textLabel и detailTextLabel в пользовательском UITableViewCell - PullRequest
0 голосов
/ 28 июля 2011

Я использую слегка настроенную версию Скрипт быстрой прокрутки Лорен Брихтер , и у меня возникает проблема, когда метки в ячейках не останавливаются, если они достигают конца ячейки. При программировании просмотра таблицы стандартным способом, если textLabels или detailTextLabels слишком длинные, они автоматически обрезаются и применяют три точки в конце строки, чтобы остаться в ячейке.

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

CGPoint t;
CGPoint d;

t.x = feedImage.size.width + 10 + 12;
t.y = 20;
[textLabel drawAtPoint:t withFont:textLabelFont];

d.x = feedImage.size.width + 10 + 12;
d.y = 39;
[detailTextLabel drawAtPoint:d withFont:detailTextLabelFont];

Ответы [ 2 ]

1 голос
/ 30 июля 2011

Выполнено этого урока .Работает без проблем.

0 голосов
/ 28 июля 2011

Вы можете программно определить (используя приблизительную ширину символов), какие будут последние два / три символа видимыми. Затем удалите оставшиеся символы и поместите три точки самостоятельно! Для символов верхнего регистра попробуйте ширину 16, а для символов нижнего регистра - ширину 12 точек при размере шрифта 15. Найдите правильные числа методом проб и ошибок.

Ok. Вот функция, которая регулирует высоту метки (для данной ширины) в соответствии с символами. Переменная "width" - это ширина метки, а "tempWidth" - это ширина текущей строки, которая рассчитывается. Вы можете изменить эту функцию, чтобы она возвращала усеченную строку с тремя точками в конце ...

#define smallLetterWidth 12
#define capitalLetterWidth 16
-(int) numRowsForString:(NSString *) inputStr width:(int) width{
int j=0;
numRows=1;
int tempWidth = 0;
while(j<[inputStr length]){
    if([[NSCharacterSet uppercaseLetterCharacterSet] characterIsMember:[inputStr characterAtIndex:j]])
        tempWidth += capitalLetterWidth;
    else
        tempWidth += smallLetterWidth;
     if(tempWidth>width){
        tempWidth = 0;
        numRows++;
        j--;
    }
    else if(tempWidth==width)
    {
        tempWidth = 0;
        numRows++;
    }
    j++;
}
return  numRows;
}

Еще лучше: Что такое - [NSString sizeWithFont: forWidth: lineBreakMode:] подходит для?

...