如何根据UITableViewCells的高度调整UITableView高度?

时间:2016-05-16 09:28:50

标签: ios swift uitableview autolayout

我有一个tableview并且我将自动布局设置为单元格,因此一个单元格的高度可能为50,另一个单元格可能为120.我需要显示最多2个单元格,因此如果计数> 2,然后细胞计数= 2,否则它等于细胞计数。

我的问题是根据每个单元格大小调整UITableView高度。如何正确设置UITableView高度约束值?

我希望我能解释一下我的意思,如果您有任何疑问,请问我

6 个答案:

答案 0 :(得分:1)

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    if indexPath.row == 0 { 
        return 50 
    } else { 
        return 120 
    } 
}

答案 1 :(得分:1)

不要明确设置高度。使用此:

tableView.estimatedRowHeight = 100
tableView.rowHeight = UITableViewAutomaticDimension

答案 2 :(得分:1)

查看我在此StackOverflow文章中发布的代码。

Dynamic height

您只需向UITableViewCell添加一个静态函数,即“测量自身”,然后将其存储在“行高”变量中。

+(CGSize)preferredSize
{
    static NSValue *sizeBox = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        // Assumption: The XIB file name matches this UIView subclass name.
        NSString* nibName = NSStringFromClass(self);
        UINib *nib = [UINib nibWithNibName:nibName bundle:nil];

        // Assumption: The XIB file only contains a single root UIView.
        UIView *rootView = [[nib instantiateWithOwner:nil options:nil] lastObject];

        sizeBox = [NSValue valueWithCGSize:rootView.frame.size];
    });
    return [sizeBox CGSizeValue];
}

(你会认为到现在为止,在2016年,Apple会为我们提供一种更简单的方法......)

答案 3 :(得分:0)

尝试在计算高度时将UITableViewCell高度存储在数组中。

如果您手动计算高度,请将高度存储在数组中。 如果您自动调整单元格高度,请获取单元格,然后获取其高度并将其存储在数组中

答案 4 :(得分:0)

如果你的ios目标是> = 8,那么你可以让你的tableview单元调整而不会有太大的痛苦。

//provide the estimated height of your cell row over here
self.tableView.estimatedRowHeight = 60
self.tableView.rowHeight = UITableViewAutomaticDimension

不要忘记对单元格内容视图中的所有视图设置顶部,底部,左侧,右侧约束。

答案 5 :(得分:0)

尝试以下代码

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return UITableViewAutomaticDimension

}