iOS UITableView动态宽度

时间:2012-02-09 22:52:19

标签: ios uitableview resize

我有一个UITableView,其单元格中包含基本字符串。目前我将表格的框架设置为宽度为400.我想知道的是,是否有一种方法可以根据行中最长的单词调整框架。我试图获取我的单元格textLabel值,但它们总是返回null。我试图在网上搜索任何帮助,但我只看到有关改变高度的参考文献。

非常感谢任何建议。

1 个答案:

答案 0 :(得分: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];  

您还应该考虑在更改宽度后如何定位表视图。由于框架的原点从未被修改过,因此桌面视图的左上角将保持在相同的位置,但它将向右增长。