根据UITableViewCell的宽度设置UITableViewCell的可变高度 - IPhone

时间:2011-02-04 16:20:46

标签: iphone uitableview

在iPhone中,tableview内容宽度为320或300,具体取决于样式。然而,当Ipad在舞台上时,我们开始根据我们的设计使用不同宽度的tableview。

一个问题是,在某些情况下,我们根据其字幕文本大小计算单元格的高度。文本高度取决于contentwidth,而单元格高度取决于文本高度。如果宽度为300或320,则可以。但是我认为我使用了500像素宽的分组式样式视图,并且无法计算减少的内容宽度。由于这个问题,我们无法根据其内容计算呼叫的高度。

我们可以获得有关单元格内容宽度信息的唯一位置是子类布局子视图方法。然而,在layoutSubview方法之前调用heightForRowAtIndexPath,并且我们没有关于缩小单元格的内容宽度的信息。

因此,我们需要一种很好的方法来计算分组样式tableview单元格的真实宽度。

我会很高兴得到任何帮助。

感谢。

M Ali Caliskan

4 个答案:

答案 0 :(得分:1)

最后我解决了分组tableView的宽度问题。标准320宽度的10(在一侧)的填充尺寸根据宽度通过有趣的数学而变化。处理此数学的简单方法是根据宽度范围使用固定值。下面的代码对4.0有效,我没有在任何其他iOs版本上测试它。

请将返回的填充大小乘以2,以查找分组样式tableView的总减少量。例如,如果对于320像素宽的tableView,paddign大小为10,则contentWidth为320 - (2.10)= 300。

CGFloat GetTableViewPaddingSize(CGFloat tableViewWidth)
{
    if (tableViewWidth < 401) {
        return 10;
    } else if (tableViewWidth < 547) {
        return 31;
    } else if (tableViewWidth < 560) {
        return 32;
    } else if (tableViewWidth < 573) {
        return 33;
    } else if (tableViewWidth < 586) {
        return 34;
    } else if (tableViewWidth < 599) {
        return 35;
    } else if (tableViewWidth < 612) {
        return 36;
    } else if (tableViewWidth < 625) {
        return 37;
    } else if (tableViewWidth < 639) {
        return 38;
    } else if (tableViewWidth < 652) {
        return 39;
    } else if (tableViewWidth < 665) {
        return 40;
    } else if (tableViewWidth < 678) {
        return 41;
    } else if (tableViewWidth < 691) {
        return 42;
    } else if (tableViewWidth < 704) {
        return 43;
    } else if (tableViewWidth < 717) {
        return 44;
    } else {
        return 45;
    }
}

答案 1 :(得分:0)

我有a similar problem,即如果您有附件视图,则在调用heightForRowAtIndexPath时不知道表格单元格的contentView的宽度。最后,除了硬编码附件视图的宽度(20px)并从通常的宽度中减去它之外,没有解决方案。我认为你必须做同样的事情 - 根据表格视图的整个宽度对单元格内容宽度进行硬编码。

答案 2 :(得分:0)

NSString UIKit Additons(找到here)提供了许多方法来查找给定特定UIFont和换行模式的字符串大小(记住String,UIFont等可以来自你的模型类,所以这个在需要显示UITableView之前已经知道了。您可以将这些方法与您自己的个人间距/填充/等结合使用。以便在调用heightForRowAtIndexPath:时找出UITableViewCell的所需大小(因此是宽度和高度)。

只要您决定如何计算给定表格单元格的大小,然后在所有UITableView委托和数据源方法中保持此方法的合理性,那么您应该没问题。

答案 3 :(得分:0)

正如詹姆斯提到并解释的那样,你可以使用像

这样的东西
UIFont *font = [UIFont systemFontOfSize:16];    
CGSize size = [TEXT_STRING sizeWithFont:font constrainedToSize:CGSizeMake(tableView.frame.size.width, 16*1000.f) lineBreakMode:UILineBreakModeCharacterWrap];
return size.height;

在委托heightForRowAtIndexPath:以及cellForRowAtIndexPath:中使用此选项可返回表格单元格的高度并更新单元格框架。

希望这对你有所帮助。