/ / встановлення висоти рядка відповідно до розміру рядка? - iphone, ios, ipad

встановлення висоти рядка відповідно до розміру рядка? - iphone, ios, ipad

У мене є додаток, в якому я хочу змінитимоя висота комірки відповідно до вмісту отриманого рядка повідомлення. Я роблю так у методі делегування сторони hieghtforrow таблиці подання.

int rowHeight =0.0f;

UITableViewCell *cell = [ self.mtableview cellForRowAtIndexPath:indexPath.row];

CGSize size = [cell.textLabel.text  sizeWithFont:[UIFont systemFontOfSize:13.0f] constrainedToSize:CGSizeMake(300, 5000) lineBreakMode:UILineBreakModeWordWrap];// calculate the height

rowHeight = size.height+10; // I use 10.0f pixel extra because depend on font

return rowHeight;

але це не дає збоїв у моїй програмі. Чи хтось може поглянути на це?

Відповіді:

1 для відповіді № 1

Мені б хотілося бачити вашу cellForRowAtIndexPath метод зрозуміти, як ви отримуєте текст для мітки.

Ви на правильному шляху з дзвінками sizeWithFont але для успішного визначення цього вам потрібно дві речі:

  1. Розмір шрифту етикетки (який ви чітко зашифровані в 13,0)
  2. І текст для визначення розміру (який ви намагаєтеся витягнути з UILabel)

(Жорстко закодований розмір шрифту в коді на 13.0 не обов'язково є гарною ідеєю, тому що якщо ви хочете змінити його для комірки, вам потрібно запам'ятати, щоб змінити його по висотіForRowAtIndexPath і де б не було, але це вже інше питання).

Замість того, щоб витягувати текст для мітки з UILabel Визначте текст із будь-якої структури даних, яка створила / містить текст в першу чергу. Ось чому бачити своє cellForRowAtIndexPath метод був би корисним.

Не дзвони cellForRowAtIndexPath від heightForRowAtIndexPath або методи не призначені для використання таким чином.

Ось простий приклад, який я можу вдосконалити, коли ви публікуєте свою cellForRowAtIndexPath код:

//ASSUME that self.arrayOfStrings is your data structure where you are retrieving the label"s text for each row.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
int rowHeight =0.0f;
NSString *stringToSize = [self.arrayOfStrings objectAtIndexPath:indexPath.row];
CGSize size = [stringToSize  sizeWithFont:[UIFont systemFontOfSize:13.0f] constrainedToSize:CGSizeMake(300, 5000) lineBreakMode:UILineBreakModeWordWrap];
rowHeight = size.height+10;
return rowHeight;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
cell.textLabel.text = [self.arrayOfStrings objectAtIndexPath:indexPath.row];
return cell;
}

0 для відповіді № 2

Видалити UITableViewCell *cell = [ self.mtableview cellForRowAtIndexPath:indexPath.row]; з вашого коду. Вам не потрібно додавати клітинку в метод HeightForRow.