iOS UITableView динамическая ширина - PullRequest
2 голосов
/ 10 февраля 2012

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

Любой совет с благодарностью.

1 Ответ

1 голос
/ 10 февраля 2012

Источник данных (который обычно является 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];  

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

...