3

tableHeaderView を使用し、スクロール時にフレームのサイズを変更することで、UITableView に視差効果を実装しました。

headerView is the table.tableHeaderView
topHeight = 400; // the height of the tableHeaderView

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGFloat scrollOffset = scrollView.contentOffset.y;
    if (scrollOffset>=0 && scrollOffset<=topHeight) {
        CGRect frame = CGRectMake(0, scrollOffset/2, 320, topHeight - scrollOffset/2);
        headerView.frame = frame;
    } else if (scrollOffset>topHeight) {
        CGRect frame = CGRectMake(0, 100, 320, 100);
        headerView.frame = frame;
    } else {
        CGRect frame = CGRectMake(0, 0, 320, topHeight);
        headerView.frame = frame;
    }
}

この効果は iOS 5.0 および 5.1 で完全に機能しますが、iOS 6 以降では tableHeaderView とテーブル コンテンツの間に奇妙なスペースができます (画像のヘッダーは赤です)。

iOS 5 - ヘッダーとテーブル コンテンツの間にスペースがありません: iOS 5 - ヘッダーとテーブル コンテンツの間にスペースがない

iOS 6 0 ヘッダーは、テーブル コンテンツから離れています。 iOS 6 0 ヘッダーがテーブル コンテンツから離れている

4

2 に答える 2

1

tableHeaderView を再度設定する必要があります。

table.tableHeaderView = table.tableHeaderView;
于 2014-12-10T12:03:14.313 に答える
0

ヘッダービューのサイズは初期値で固定のようです。おそらく iOS 6 では、テーブル ビューからの内部計算が変更されているため、テーブルをリロードしないとビューの高さを変更できません。

scrollViewDidScroll 関数の最後にテーブルをリロードすると機能します (ただし、パフォーマンスの問題になります)。

テーブルをリロードせずにセルの高さを操作するのと同じ効果です。

于 2012-12-07T08:41:53.120 に答える