テーブル ビューをストーリーボード シーンにドラッグしましたが、その高さは静的であり、ストーリーボードで手動で調整しない限り、含まれるセルの数に基づいて調整されません。内容の合計の高さに基づいて、このテーブルの高さを調整するにはどうすればよいですか?
3118 次
1 に答える
1
あなたはこれのいくつかのバージョンをしなければならないでしょう:
- 表示されるセルの数を計算します
- 各セルの高さを計算します
- 計算を行い、高さを設定します
UITableView
あなたが怒る前に(私はそれがかなり明白であることを知っているので)、私にこれをフォローアップさせてください:
- 常に表示されるセルの数が確実にわかっている場合(これは静的な値です)、InterfaceBuilderで高さを手動で調整できます。
- 確かにわからない場合(あなたの質問に基づいて、私が推測していることです)、実行時に上記の#の1から3を実行する必要があります。次に、
UITableView
はのサブクラスであるため、そのプロパティUIView
を簡単に調整できます。frame
例えば:
- 私は7つのセルを持っています。
- セル1、3、および5(インデックス0、2、および4)の高さは20ピクセルです。
- セル2、4、6、および7(インデックス1、3、5、および6)の高さは30ピクセルです。
- ディスプレイの高さの合計は180ピクセルが必要です(セパレーターなどの理由で実際にこれを試してみる必要があるかもしれません)。
- だから、私はただ呼び出すことができます:
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 に答える