3

プロトタイプ セルをいじって、テーブル ビューの下部にフッター ビューを追加する必要があるので、ユーザーがテーブル ビューの下部にスクロールしたときにこのフッター ビューが表示されるようにします。そこで、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フッターが正しく表示されます。

4

2 に答える 2

2

次の行を見逃していると思います

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{

    return HEIGHT_OF_YOUR_FOOTER_VIEW;

}

編集

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{

    UIView *footer=[[UIView alloc] initWithFrame:CGRectMake(0,0,320.0,50.0)];
    footer.layer.backgroundColor = [UIColor orangeColor].CGColor;


    return footer;    
}

更新しました

このドキュメントを確認してください

于 2013-11-11T16:48:20.467 に答える
1

ついに解決策を見つけました。自動レイアウトが無効になっているときにフッターが正しく表示されることに気付いたので、制約を調べ始めました。そのため、Ctrl + ドラッグを使用して、先頭のスペースをコンテナーに、末尾のスペース、下部のスペース、および上部のスペースをコンテナーの制約に追加しました。ただし、IB では、Y 位置の制約がないことについて赤い警告が表示されました。そのため、IB 提案パネルから「不足している制約を追加」を選択した後、IB は別のシステム制約を追加しましたが、フッターはまだ正しく表示されませんでした。IB はコンテナ システムの制約に正しい上部スペースと下部スペースを追加できず、それを修正することさえできなかったようです。その結果、5 つのシステム制約があります。

ここに画像の説明を入力

テーブルビューから含むビューへの Ctrl + ドラッグを使用したシステム制約の追加は、以前のデモで機能していました。ただし、今回は IB が正しい上部スペースと下部スペースをコンテナーに追加できなかったため、上部スペースの垂直制約の値は -568 でした。0に設定しようとしましたが、うまくいきませんでした。すべての制約を削除して再度追加することを 10 回試行しました。同じ結果です。

そこで、これらの垂直方向 (下部とスペース) の制約をすべて削除してから、[不足している制約を追加] を選択しました。そしてビンゴ!IB は正しい垂直方向の制約を追加し、フッター ビューは正しく表示されました。正しい制約は次のようになります。ただし、テーブル ビューからコンテナー ビューに Ctrl + ドラッグを実行しているときに、IB が正しい制約を追加できなかった理由はまだわかりません。

ここに画像の説明を入力

于 2013-11-12T12:00:55.650 に答える