0

私はこのチュートリアルを行っていましたが、一部で必要な結果が得られませんでした。

UITableViewCell各セルにグラデーション効果を追加したかったので、をサブクラス化し、セルを直接カスタマイズしました。基本的に、各セルの上下にグラデーション効果を加えました。

これが私がそれに使用したコードです:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // add a layer that overlays the cell adding a subtle gradient effect
        gradientLayer = [CAGradientLayer layer];
        gradientLayer.frame = self.bounds;
        gradientLayer.colors = @[(id)[[UIColor colorWithWhite:1.0f alpha:0.2f] CGColor],
        (id)[[UIColor colorWithWhite:1.0f alpha:0.1f] CGColor],
        (id)[[UIColor clearColor] CGColor],
        (id)[[UIColor colorWithWhite:0.0f alpha:0.1f] CGColor]];
        gradientLayer.locations = @[@0.00f, @0.01f, @0.95f, @1.00f];
        [self.layer insertSublayer:gradientLayer atIndex:0];
    }
    return self;
}
-(void) layoutSubviews{
   [super layoutSubviews];

   //ensure that gradient layers occupy the full bounds
   gradientLayer.frame = self.bounds;
}

望ましい結果として、gradientLayer がセルの境界全体を占めるようにしたいと考えています。ただし、セルの最初と最後から 1 mm 程度しか占有しません。したがって、完全な境界を占有していません。

コメントアウトする[super layoutSubviews]と、セルの境界全体を占める完全なグラデーションが表示されます。ただし、今回は、セル内のテキストは表示されません。

私はそれを解決できませんでした。どんな助けでも感謝します。

4

2 に答える 2

1

以下のコメントは、問題がこのように見えることを示しました

これ

そして解決策は、セルの背景をクリアカラーに設定することでした。

于 2012-12-11T22:37:50.847 に答える
0

これを行う正しい方法は、次のように self.contentView.frame を使用することです。

gradientLayer.frame = self.contentView.frame;
于 2012-12-11T23:55:42.590 に答える