Источником данных (который обычно является 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];
Вы также должны подумать о том, как будет выглядеть табличный вид после внесения изменения в ширину. Поскольку происхождение кадра никогда не было изменено, верхний левый угол стола будет оставаться в том же положении, но он будет расти вправо.
Как получить шрифт и строку из таблицы? Я только спрашиваю, потому что я установил ячейку, используя UITableViewCellStyleDefault – Seb
. Эта [ссылка] (http://stackoverflow.com/questions/4775107/uitableviewcellstylesubtitle-font-size) показывает очень хорошее представление о том, что такое UIFont, но если бы я был вами, я специально установил бы UIFont для моих ячеек таблицы, чтобы вы знали наверняка. Я уверен, что режим разрыва строки по умолчанию для ячеек таблицы по умолчанию - UILineBreakModeTailTruncation. –