2014-01-20 2 views
2

Я пытаюсь сделать клиент Twitter с XCode 4.2. (iOS version 5.) Я хочу, чтобы основной график моего приложения выглядеть похоже на временной шкале Twitter IOS приложения:Динамическое изменение ячеек таблицы в приложении iOS

Twitter's UI

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

  - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
      { 
       static NSString* cellIdentifier = @"TweetContainerCell"; 
       UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
       @try { 
        UILabel* tweetLabel; 
        if(cell != nil) { 
         tweetLabel = (UILabel*)[cell.contentView viewWithTag:1]; 
         NSString* tweetText = tweetLabel.text; 
         CGSize expectedLabelSize = [tweetText sizeWithFont:[UIFont fontWithName:tweetLabel.font.fontName size:20] constrainedToSize:CGSizeMake(CGFLOAT_MIN, CGFLOAT_MAX) lineBreakMode:UILineBreakModeWordWrap]; 
         //[tweetLabel setFrame:CGRectMake(tweetLabel.frame.origin.x, tweetLabel.frame.origin.y, cell.frame.size.width, expectedLabelSize.height)]; 
         //[cell.textLabel setFrame:tweetLabel.bounds]; 
         //[tweetLabel sizeToFit]; 
         //[cell setFrame:CGRectMake(cell.frame.origin.x, cell.frame.origin.y, cell.frame.size.width, expectedLabelSize.height)]; 
         //[cell sizeToFit]; 
         NSLog(@"Font size: %f", expectedLabelSize.height); 
         return (expectedLabelSize.height * 2); 
        } 
       } 
       /* Imgur URL: http://i.imgur.com/lHnsAsP.png */ 
       /* http://i.imgur.com/hA9EKfI.png */ 
       @catch (NSException* exception) { 
        NSLog(@"Exception: %@", exception); 
       } 
       return 0; 
      } 

Однако, это то, что мое приложение заканчивает тем, как:

My application

Проблемы:

1) Кажется, что каждая ячейка имеет ту же высоту, что и самая высокая ячейка во всей таблице, вместо того, чтобы иметь разную высоту.

2) Из-за этого пространство между верхней границей ячейки и текстом отличается для каждой ячейки (потому что iOS центрирует текст по вертикали).

Я изучаю iOS развитие и неспособность сделать такую ​​простую вещь, даже после большого количества исследований и проведения много часов, кажется действительно обескураживающим. Любая помощь приветствуется.

(В случае, если информация, которую я дал не достаточно, вот файл ZIP, содержащий весь проект: https://db.tt/m5suxWCj)

ответ

2

Ваша проблема в том, что ваша метка не была создана, так как tableView:heightForRowAtIndexPath: изначально вызывается перед tableView:cellForRowAtIndexPath:, в котором создается ваша ячейка. В tableView:heightForRowAtIndexPath: вы должны определить высоту ячейки максимально эффективно, без участия UIViews.

Для этого вы должны сохранить NSString в другом месте в своем источнике данных табличного представления и рассчитать expectedLabelSize на основе этого.

Обратите внимание, что sizeWithFont: устарел в IOS 7, поэтому для IOS 7 и выше вы должны использовать вместо этого sizeWithAttributes:.

Смежные вопросы