2012-02-09 2 views
2

У меня есть UITableView с ячейками, в которых есть основные строки. На данный момент у меня жесткий диск моего стола установлен на ширину 400. Мне было интересно, есть ли способ настроить кадр на основе самого длинного слова в строке. Я попытался получить значение myLabel для своих ячеек, но они всегда возвращают значение null. Я пытался искать в Интернете любую помощь, но я видел только ссылки на изменение высоты.iOS UITableView динамическая ширина

Любые советы приветствуются.

ответ

1

Источником данных (который обычно является UITableViewController) может быть тот, который вычисляет максимальную ширину любой строки, которую он предоставляет UITableView. В этот момент источник данных может изменить кадр UITableView, и это должно активировать механизм перезагрузки UITableView. Благодаря NSString UIKit Additions вычисление максимальной ширины строки очень просто. Также позаботьтесь о том, чтобы установить ограничение на ширину таблицы, указав максимальную ширину (вы упомянули 400).

CGFloat maxWidth = 0.0; 
    CGSize maxSize = CGSizeMake(400,99999); 
    CGFloat cellIndent = 0; //Use this to account for any cell indenting 
    for(NSString * text in datasource.array){ 

     CGSize textSize = [text sizeWithFont:yourFont 
             constrainedToSize:maxSize 
             lineBreakMode:UILineBreakModeWordWrap]; 

     maxWidth = MAX(maxWidth,textSize.width + 2.0*cellIndent); 
    } 

    //Now change the tableView's frame 
    CGRect newFrame = tableView.frame; 
    newFrame.size.width = maxWidth; 
    tableView.frame = newFrame; 

    //I don't believe a table reload is necessary let me know 
    [tableView reloadData]; 

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

+0

Как получить шрифт и строку из таблицы? Я только спрашиваю, потому что я установил ячейку, используя UITableViewCellStyleDefault – Seb

+0

. Эта [ссылка] (http://stackoverflow.com/questions/4775107/uitableviewcellstylesubtitle-font-size) показывает очень хорошее представление о том, что такое UIFont, но если бы я был вами, я специально установил бы UIFont для моих ячеек таблицы, чтобы вы знали наверняка. Я уверен, что режим разрыва строки по умолчанию для ячеек таблицы по умолчанию - UILineBreakModeTailTruncation. –

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