2012-07-15 12 views
6

私は3つのセクションを持つUITableViewを持っています。それぞれには、viewForFooterInSectionを使用して追加したフッターがあります。私が抱えている問題は、テーブルビューを下にスクロールすると、フッターが画面の一番下に張り付いて残りのセルのようにスクロールしないということです。誰もがそれを作る方法を知っているので、フッターはほとんどセルのように動作し、テーブルの残りの部分とともにスクロールしますか?ありがとう!iOS - viewForFooterInSectionはUITableViewの下部に固執します

答えて

10

私は実際にそれを理解しました。おそらくそれを行う最もスマートな方法はありませんが、私はUITableViewスタイルをグループに変更し、それを修正しました。私はTableViewをちょっと微調整しなければならなかったので、セルはグループ化されていない(クリアな背景、セパレータなし)ように見えるが、うまくいきました。フッターは、もはやTableViewの下部に固執しません。

+0

ありがとうございました... また、セクションの高さを追加する必要があります。それ以外はうまくいきます.. –

+0

「グループ化」されたUITableViewスタイルで表示されるセクションヘッダーを非表示にするには、https://stackoverflow.com/questions/を参照してください。 19056428/how-to-hide-first-section-header-in-uitableview-grouped-style –

4

スクロールビューの最後のセルとしてフッターをセルの1つに設定した場合(これは可能ですが、uitableを設定した配列の最後の項目として設定します)

5

フッターが貼られています。トリックは、各セクションに余分なセルを追加し、そこにフッターをレンダリングすることです。さらにヘルプが必要な場合は、コメントを追加してください。ただし、それはかなり簡単です。

EDITS:

Q:よし。私はCoreViewとNSFetchedResultsControllerを使ってTableViewを生成しています。これを達成するのはもっと難しいでしょうか?

A:全くありません。各セクション内の余分なセルを追加し、そのセクションのためのあなたのfetchedResultsControllerの行よりも

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

テスト> indexPath.row場合にするには

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

をオーバーライドします。真の場合は、セルにフッター情報を追加します。

+0

いいえ。私はCoreViewとNSFetchedResultsControllerを使ってTableViewを生成しています。これを達成するのはもっと難しいでしょうか? – mhbdr

+0

全くありません。オーバーライド - (NSInteger)のtableView:(のUITableView *)のtableView numberOfRowsInSection:(NSInteger)各セクション内の余分なセルを追加するにはセクション 、および - (UITableViewCellの*)のtableView:(のUITableView *)のtableView cellForRowAtIndexPath:(NSIndexPath *)indexPath indexPath.row>が、そのセクションのfetchedresultsコントローラの行よりもテストされているかどうかをテストします。真の場合は、セルにフッター情報を追加します。 –

0

余分なセルを追加し、それを不可視にしてビューをレンダリングすることは、フッターを追加することをお勧めしません。それを正しく行うと、かなりストレートフォワードです:

- (UIView*)tableView:(UITableView*)tableView viewForFooterInSection:(NSInteger)section { 
    NSString* sectionFooter = [self tableView:tableView titleForFooterInSection:section]; 

    UIView* view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, yourWidth, yourHeight)]; //create a view- the width should usually be the width of the screen 
    UILabel* label = [[UILabel alloc] initWithFrame:someFrame]; 

    label.backgroundColor = [UIColor blueColor]; 
    label.textColor = [UIColor whiteColor]; 
    label.text = sectionFooter; 

    [view addSubview:label]; 

    return view; 
} 

またにtableViewを実装する必要があります:titleForFooterInSectionを:あなたは、私がここに持っているようにテキストを追加したい場合。

+2

あなたの答えはフッターを追加するのに有効ですが、フッターはテーブルビューの一番下に貼り付けられます。 – rsc

1

私のコードが風景モードでは機能せず、ポートレートモードでしか動作しないことが判明したときも同様の問題がありました。私の古いコードでは、ランドスケープでは、テーブルビューは表示可能なビューよりもスクロールできず、スクロール(上の行が表示されないようにする)のときに一番上の行に戻ってきました。私が変更しなければならないのは、高さがデフォルトのセルの高さとして44に設定されていることを確認することだけです。だから私のフッタは、基本的にclearColorを持つ別のセルです。私のアプリは「AutoLayout」を使用しています。

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section 
{ 
    CGRect screenBounds = [UIScreen mainScreen].bounds; 
    CGFloat width = screenBounds.size.width; 
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width, 44)]; 
    view.backgroundColor = [UIColor clearColor]; 

    UILabel *label = [[UILabel alloc] initWithFrame:view.frame]; 
    label.text = @"Your Text"; 
    [view addSubview:label]; 
    return view; 
} 
関連する問題