将Storyboard创建的UITableview的高度调整为其内容的高度

时间:2012-05-04 15:32:20

标签: objective-c ios xcode uitableview storyboard

我已将表格视图拖到我的故事板场景中,但它的高度是静态的,除非我在故事板中手动调整它,否则不会根据它包含的单元格进行调整。如何让这张桌子根据其内容的总高度调整自己的高度?

1 个答案:

答案 0 :(得分:1)

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

  1. 计算将显示的单元格数
  2. 计算每个单元格的高度
  3. 进行数学计算并设置UITableView
  4. 的高度

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

    1. 如果您确定一直显示多少个单元格(并且它是静态值),您只需在Interface Builder中手动调整高度。
    2. 如果你知道(根据你的问题,我猜是这种情况),你必须在运行时执行#1的1到3。然后,由于UITableViewUIView的子类,因此您只需调整其frame属性。
    3. 例如:

      1. 我有7个牢房。
      2. 单元格1,3和5(索引0,2和4)高20像素。
      3. 细胞2,4,6和7(指数1,3,5和6)高30像素。
      4. 我需要180像素的总显示高度(由于分隔符等原因,你可能真的需要使用它。)
      5. 所以,我可以打电话:

      6. 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;
        }