Изменение размера ярлыка ячейки пользовательского табличного представления iOS при изменении размера - PullRequest
1 голос
/ 17 июля 2011

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

Я создал собственный вид ячейки с 3 метками, и я заполняю эти метки текстами.Размер одной из меток должен автоматически изменяться в зависимости от объема текста (максимум 140 символов).

Это прекрасно работает, пока я не прокручиваю список вверх / вниз, когда текст либо расширяется до одной полной строки (как метка расширилась), ИЛИ занимает только часть пространства, поэтому он заканчивается глубже и переполняется вдругие метки (у меня есть "Clip Subviews", включенные согласно другому подобному вопросу SO)

Таким образом, когда таблица и ее данные загружаются впервые, экран выглядит так:

перед прокруткойhttp://lloydsparkes.co.uk/files/iOS-BeforeScrolling.png

И после небольшой прокрутки это выглядит так:

после прокрутки http://lloydsparkes.co.uk/files/iOS-AfterScrolling.png

Так что кажется, что размер метки изменяется во время прокрутки (возможно, из-за того жеповторное использование ячейки?) и изменение размера обратно до правильного размера.

Мой код для заполнения ячейки:

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

static NSString *myID = @"customCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:myID];

if(cell == NULL) {

    [[NSBundle mainBundle] loadNibNamed:@"CustomCellView" owner:self options:nil];

    cell = customCell;
    self.customCell = nil;
}

Post *p = [posts objectAtIndex:indexPath.row];

UILabel *label = (UILabel*)[cell viewWithTag:15];
label.text = p.Name;

label = (UILabel*)[cell viewWithTag:10];
label.text = p.Text;
[label sizeToFit];

label = (UILabel*)[cell viewWithTag:20];
label.text = [p Source];

//[cell layoutSubviews];

return cell;
}

Итак, что я спрашиваю, что является причиной этой проблемы?и как это можно решить?

1 Ответ

7 голосов
/ 17 июля 2011

Метод sizeToFit может вести себя странным образом, поскольку кадр UILabel изменяется каждый раз, когда вызывается cellForRowAtIndexPath.

Одна вещь, которую вы можете попробовать, это установить рамку объекта label обратно в исходный размер (значение valeu, заданное в файле NIB) прямо перед вызовом sizeToFit

[label setFrame:CGRectMake(0.0f, 0.0f, 100.0f, 50.0f)];    
[label sizeToFit];
...