iOS UITableView动态宽度



我有一个UITableView,其中包含有基本字符串的单元格。现在我把桌子的框架硬定为400宽。我想知道的是,是否有办法根据一行中最长的单词来调整框架。我试图获取我的单元格textLabel值,但它们总是返回null。我试着在网上搜索任何帮助,但我只看到了关于更改高度的参考资料。

如有任何建议,不胜感激。

数据源(通常是UITableViewController)可以计算它提供给UITableView的任何字符串的最大宽度。此时,数据源可以修改UITableView的框架,这应该会激活UITableView重新加载机制。多亏了NSStringUIKit 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];  

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

最新更新