プロトタイプ セルをいじって、テーブル ビューの下部にフッター ビューを追加する必要があるので、ユーザーがテーブル ビューの下部にスクロールしたときにこのフッター ビューが表示されるようにします。そこで、1 つの画面、テーブル ビュー、および 2 つのプロトタイプ セルでデモ プロジェクトを作成しました。Interface Builder を使用してテーブルの下にビューをドラッグ アンド ドロップする方法を探しています。問題は、ビューがテーブル ビュー コンテンツの外側に配置されているように見えるため、フッターは表示されますが、スクロールできません (テーブル ビューの下部にフッター ビューのごく一部しか表示されません)。
既に動作する実装を見たが、追加する必要がある魔法の設定またはコード行を把握できないため、これが動作するはずであることはわかっています。
メソッドは次のとおりです。
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection: (NSInteger)section {
return 2;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
CGFloat rowHeight = 10;
switch (indexPath.row) {
case 0: {
rowHeight = 376;
break;
}
case 1: {
rowHeight = 105;
break;
}
}
return rowHeight;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
switch (indexPath.row) {
case 0: {
Cell1 *cell1 = [tableView dequeueReusableCellWithIdentifier:@"Cell1" forIndexPath:indexPath];
return cell1;
break;
}
case 1: {
Cell2 *cell2 = [tableView dequeueReusableCellWithIdentifier:@"Cell2" forIndexPath:indexPath];
return cell2;
break;
}
}
return nil;
}
2 つの異なる高さのセルで 2 行のテーブルを作成するだけです。Cell1 および Cell2 クラスは、UITableViewCell の空のサブクラスです。
テーブル ビューとセルが Interface Builder でどのように表示されるかを次に示します。
起動後の最初のビューは次のとおりです。
一番下までスクロールすると、次のように表示されます。
フッターはありますが、テーブル ビュー (スクロール コンテンツ) の外側にあります。ご覧のとおり、テーブル ビューはデフォルトでフッター用に下部に 44 ピクセルのスペースを確保しています。しかし、tableView:heightForFooterInSection: でフッターの高さを設定すると、空白が表示されます。
また、このビューを IB のビュー階層までドラッグして移動しようとしたため、ビューがヘッダー ビューになってしまいました。その場合、ビューはヘッダー ビューとして上部に表示されますが、下部にスクロールすると 2 番目のセルが部分的にしか表示されません。テーブルは、プロトタイプの動的セルを表示するために必要なスペースを計算しているようです (テーブル ビューに「動的プロトタイプ」を設定しています)。また、追加のフッターまたはヘッダー ビューをインターフェイス ビルダーに追加すると、セルのスペースが少なくなる (ビューがヘッダーとして追加された場合) か、フッターが表示されません。
更新します。このメソッドを追加すると、空白が表示されます。
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return 50;
}
その場合に得られるものは次のとおりです(cell2の下の空白スペース):
自動レイアウトを無効にすると、 UPDATE2フッターが正しく表示されます。