2012-02-09 93 views
2

我有一个UITableView,其中包含基本字符串的单元格。此刻,我将桌子的框架硬设置为400的宽度。我想知道的是,是否有方法根据行中最长的单词来调整框架。我试图让我的单元格textLabel值,但他们总是返回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 2012-02-10 00:30:25

+0

这[链接](http://stackoverflow.com/questions/4775107/uitableviewcellstylesubtitle-font-size)显示了一个很好的猜测是什么UIFont是,但如果我是你我将专门为我的表格单元格设置一个UIFont,所以您肯定会知道。我确定默认表格单元格的默认换行符模式是UILineBreakModeTailTruncation。 – 2012-02-10 00:52:17