0

テーブル ビューをストーリーボード シーンにドラッグしましたが、その高さは静的であり、ストーリーボードで手動で調整しない限り、含まれるセルの数に基づいて調整されません。内容の合計の高さに基づいて、このテーブルの高さを調整するにはどうすればよいですか?

4

1 に答える 1

1

あなたはこれのいくつかのバージョンをしなければならないでしょう:

  1. 表示されるセルの数を計算します
  2. 各セルの高さを計算します
  3. 計算を行い、高さを設定しますUITableView

あなたが怒る前に(私はそれがかなり明白であることを知っているので)、私にこれをフォローアップさせてください:

  1. 常に表示されるセルの数が確実にわかっている場合(これは静的な値です)、InterfaceBuilderで高さを手動で調整できます。
  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 に答える