2013-07-25 4 views
0

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

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

static NSString *CellIdentifier = @"DoCCell"; 
DoCCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[DoCCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
} 
// Configure the cell... 

CGSize constraintSize = CGSizeMake(cell.infoLabel.frame.size.width, MAXFLOAT); 
CGSize labelSize = [_content[[indexPath row] * 2] sizeWithFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:12.0f] 
              constrainedToSize:constraintSize 
               lineBreakMode:NSLineBreakByWordWrapping]; 
CGRect frame = CGRectMake (cell.infoLabel.frame.origin.x, cell.infoLabel.frame.origin.y, labelSize.width, labelSize.height); 
[cell.infoLabel setFrame:frame]; 

cell.infoLabel.lineBreakMode = NSLineBreakByWordWrapping; 
cell.infoLabel.numberOfLines = 10; 

_font = cell.infoLabel.font; 
cell.infoLabel.text = _content[[indexPath row] * 2]; 
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
return cell; 
} 


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
CGSize constraintSize = CGSizeMake(280.0f, MAXFLOAT); 

CGSize size = [_content[[indexPath row] * 2] sizeWithFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:12.0f] 
       constrainedToSize:constraintSize 
        lineBreakMode:NSLineBreakByWordWrapping]; 
return size.height + 30.0; 
} 

, но когда я запускаю мой код, высота ячеек изменяется соответствующим образом в то время как размер этикетки нет.

Ячейка - это пользовательская ячейка, и я добавил ярлык через .xib-файл. Я попробовал вручную растягивать ярлык, который работал в том смысле, что он отобразит весь текст, чтобы проблема не заключалась в упаковке этикетки. Я также проверил cell.infoLabel.frame.size.height и значение высоты DOES изменилось с высотой ячейки до значения, но оно не отображается как таковое. Что я делаю не так?

ответ

1

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

Я думаю, что вы должны сделать следующую внутри cellForRowAtIndexPath:

cell.infoLabel.text = _content[[indexPath row] * 2]; 
cell.infoLabel.numberOfLines = 0; 
[cell.infoLabel sizeToFit]; 

Более подробно об этом можно найти в следующей ссылке: Vertical Alignment of UILabel Text

Надеется, что это помогает! :)

+0

ОК у меня теперь есть '// Настройка ячейки ... _font = cell.infoLabel.font; cell.infoLabel.text = _content [[indexPath row] * 2]; cell.infoLabel.numberOfLines = 0; [cell.infoLabel sizeToFit]; 'но он все еще не работает –

+0

Я не уверен, но можете ли вы попробовать удалить режим линии для метки, в частности, можете просто прокомментировать эту строку и еще раз проверить: cell.infoLabel.lineBreakMode = NSLineBreakByWordWrapping; – An1Ba7

+0

это тоже не работает. [Здесь] (http://imgur.com/A2aRkQJ) - это то, что детали ярлыка находятся в .xib, если это помогает. –

0

Использование ниже кода в cellForRowAtIndexPath делегатом Tableview:

// getDynamicHeight function calculates height based on text length 
    //Dynamically determine height for cell text 
    CGFloat calculatedHeight = [self getDynamicHeight:@"Some very long text here"]; 

    //Set name label frame based on text height 
    cell.infoLabel.frame = CGRectMake(cell.infoLabel.frame.origin.x,cell.infoLabel.frame.origin.y, cell.infoLabel.frame.size.width,calculatedHeight); 
    cell.infoLabel.numberOfLines = 5; 

    cell.infoLabel.text = @"Some very long text here"; 

// getDynamicHeight function 
//Dynamically determine height for cell based in containing Text 
-(CGFloat) getDynamicHeight : (NSString *) strCellTextName { 

UILabel *lblGetDynamicHeight = [[UILabel alloc] init]; 
lblGetDynamicHeight.lineBreakMode = UILineBreakModeWordWrap; 

lblGetDynamicHeight.text = strCellTextName; 

CGSize labelStringSize = [lblGetDynamicHeight.text sizeWithFont:lblGetDynamicHeight.font constrainedToSize:CGSizeMake(142, 9999) lineBreakMode:lblGetDynamicHeight.lineBreakMode]; 

return labelStringSize.height; } 
Смежные вопросы