0

我已经将一个表格视图拖到我的情节提要场景中,但它的高度是静态的,并且不会根据它包含的单元格数量进行调整,除非我在情节提要中手动调整它。我怎样才能让这张桌子根据其内容的总高度调整自己的高度?

4

1 回答 1

1

你将不得不做这个的一些版本:

  1. 弄清楚将显示多少个单元格
  2. 找出每个单元格的高度
  3. 做数学并设置高度UITableView

在你生气之前(因为我知道这很明显),让我跟进一下:

  1. 如果您确定将始终显示多少个单元格(并且它是一个静态值),您可以在 Interface Builder 中手动调整高度。
  2. 如果您不确定(根据您的问题,我猜是这种情况),您必须在运行时执行上述 1 到 3 的操作。然后,因为UITableView是 的子类UIView,你可以简单地调整它的frame属性。

例如:

  1. 我有7个细胞。
  2. 单元格 1、3 和 5(索引 0、2 和 4)的高度为 20 像素。
  3. 单元格 2、4、6 和 7(索引 1、3、5 和 6)的高度为 30 像素。
  4. 我需要 180 像素的总显示高度(由于分隔符等,您实际上可能需要使用它。)
  5. 所以,我可以打电话:

CGFloat newHeight = ... // Whatever you calculate
CGRect currentFrame = [[self MyTableView] frame];  
[[self MyTableView] setFrame:CGRectMake(
                 currentFrame.origin.x,
                 currentFrame.origin.y,
                 currentFrame.size.width,
                 newHeight)
 ];

如果您想变得非常花哨,可以通过将其包装在一个[UIView animationWithDuration:]块中来为更改设置动画。

希望这可以帮助!


更新/编辑

这是一种笨拙的方法......它有效,但我确信有更好的方法来做到这一点。我认为这是最好/最快/最有效的方式。这更多是为了说明一个原则。;-)

- (CGFloat)totalHeightNeededForTableView:(UITableView *)tv {
    CGFloat retVal = 0;

    int sectionCount = [self numberOfSectionsInTableView:tv];
    int rowCount = 0;
    NSIndexPath *path = nil;
    for (int i = 0; i < sectionCount; i = i + 1) {
        rowCount = [self tableView:tv numberOfRowsInSection:i];
        for (int j = 0; j < rowCount; j = j + 1) {
            path = [NSIndexPath indexPathForRow:j inSection:i];
            retVal = retVal + [self tableView:tv heightForRowAtIndexPath:path];
        }
    }
    return retVal;
}
于 2012-05-04T15:54:43.513 回答