2012-10-05 12 views
7

私はラジオグラデーションの背景を持つViewControllerを持っています。その中には、セルとセクションを持つUITableViewがあります。今は、スクロールするときにテーブルビューの背後にグラデーションを表示したいと思います。問題は、セクションが上部にロックされている場合、セクションの後ろにあるセルが見えることです。私はセクションの背景色を設定しますが、それを行うとラジアルグラデーションの背景に一致しません。 clearColorのバックグラウンドを維持しながら、セクションの下にあるセルクリップを持っていますか?clearColorの背景を持つUITableViewセクション?

+0

スクリーンショットを投稿できますか?これを視覚化するのは苦労します。 –

+0

tableview.backgroundColor = [UIColor clearColor]を設定できます。 – kamleshwar

答えて

8

私が理解していれば、完全にクリアなテーブルビューとテーブルビューセルが必要なので、ビューコントローラのバックグラウンドを見ることができます。

あなたはまた、セクションを透明にしたい場合は、この方法を使用することができます

cell.backgroundColor = [UIColor clearColor] 

バックグラウンド

tableview.backgroundColor = [UIColor clearColor]; 
tableView.opaque = NO; 
tableView.backgroundView = nil; 

ともセルを有していないとして、テーブルビューを設定することによって、これを達成することができます:

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

カスタムビューを作成する(たとえば、トランスペアレンt .png背景)

私はあなたの質問を正しく理解することを願っています。細胞は、セクションヘッダの下に行く前に停止することを外観を与えるために

明確化した後


編集:

このIVARとのUITableViewのサブクラスであるクラスを作る:

@interface CustomTableView : UITableView 
{ 
     CAGradientLayer* maskLayer; 
} 

これは明らかにグラデーションを作成しますが、必要に応じて調整するか、CALayer、プログラムでマスクを作成するのではなく、セクションヘッダーの正しい幅/高さで.pngを作成します。とにかく

:その後、

- (id)initWithCoder:(NSCoder *)coder 
{ 
    self = [super initWithCoder:coder]; 
    if (self) 
    { 
     [self setupGradients]; //call your method 
    } 
    return self; 
} 

- (void)setupGradients 
{ 
    [self addObserver:self forKeyPath:@"contentOffset" options:0 context:nil]; 

    */ ***** if you choose to use CALayer instead of CAGradient ****** */ 
    //maskLayer = [[CALayer layer] retain]; 
    //maskLayer.contents = (id) [UIImage imageNamed:@"maskLayer.png"].CGImage; 
    //maskLayer.backgroundColor = [UIColor clearColor].CGColor; 
    */ ***** if you choose to use CALayer instead of CAGradient ****** */ 

    maskLayer = [[CAGradientLayer layer] retain]; 

    CGColorRef outerColor = [UIColor colorWithWhite:1.0 alpha:0.0].CGColor; 
    CGColorRef innerColor = [UIColor colorWithWhite:1.0 alpha:1.0].CGColor; 

    maskLayer.colors = [NSArray arrayWithObjects:(id)outerColor, 
         (id)innerColor, (id)innerColor, (id)outerColor, nil]; 
    maskLayer.locations = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0], 
          [NSNumber numberWithFloat:0.0], 
          [NSNumber numberWithFloat:0.9], 
          [NSNumber numberWithFloat:1.0], nil]; //this creates a gradient  effect. Tweak these numbers for a hard line. 

    maskLayer.bounds = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height); 
    maskLayer.anchorPoint = CGPointZero; 

    self.layer.mask = maskLayer; 
    } 

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
{   
    [CATransaction begin]; 
    [CATransaction setDisableActions:YES]; 
    maskLayer.position = CGPointMake(0, self.contentOffset.y); 
    [CATransaction commit]; 
} 

あなたのビューコントローラに:あなたはCAGradientLayerを使用する場合の基本的な考え方はマスクである

CustomTableView *_tableView; //ivar 

    _tableView = [[CustomTableView alloc] initWithFrame:YOUR_FRAME]; 

、あなたはあなたのテーブルビューの上にマスク形状を作成しますセクションヘッダーと同じサイズです。細胞がその背後で「消える」ように見えます。ちょっとトリッキーですが、うまくいくでしょう。

+2

私は達成しようとしていることを理解していますが、問題はありません。問題は、私のセクションが透過的なので、セクションの後ろを通過するときに細胞が見えるということです。これは、セルとセクションの混乱を招いてひどく見えます。私は答えをありがとう、 – Bobbake4

+0

ああ私は今理解しています。興味深い質問。私はあなたがそれをどうやってできるかという考えを持っていますが、ちょっとハッキリです。私は上記の私の答えを編集します。 – sixstatesaway

10

独自のヘッダービューを作成せずに透過セクションヘッダーを取得する簡単な方法。

- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section 
{ 
    if ([view isKindOfClass:[UITableViewHeaderFooterView class]]) { 
     UITableViewHeaderFooterView *headerView = (UITableViewHeaderFooterView *)view; 
     headerView.contentView.backgroundColor = [UIColor clearColor]; 
     headerView.backgroundView.backgroundColor = [UIColor clearColor]; 
    } 
} 

コードのこの作品は、iOSの7に完全に正常に動作

EDIT (私はこれは少し遅れている知っているが、これと一緒にあなたは必ず背景色を作る2行を追加する必要があります背景色の背景色?)も明確である。

tableView.backgroundColor = [UIColor clearColor]; 
tableView.backgroundView.backgroundColor = [UIColor clearColor]; 
+0

パーフェクト!それは私のために働いた。どうもありがとうございました –

関連する問題