0

を背景UITableViewとする習慣があります。UIImageViewセルの背景画像を通して背景画像を見ることができるように、表にいくつかの透明なセルを表示したいと考えています。

これまでのところ、セルbackgroundViewUIImageViewカスタムalphaで に設定し、背景画像ビューを に設定していbackgroundColorます[UIColor clearColor]。また、セルを に設定しbackgroundColorてい[UIColor clearColor]ます。

セルが最初に描画されるとき、まだ白い背景が表示されます。ただし、セルを画面からドラッグすると、元に戻ったときに透明になります。誰がそれがどうなっているのか知っていますか?

編集:ここにいくつかのコードがありますが、上で述べたこと以上のことを実際に伝えているとは思いません. 一部の機密/無関係なものは編集されています。

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    if((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) {
        [self setBackgroundColor:[UIColor clearColor]];
        ...
        _backgroundImageView = [[UIImageView alloc] initWithFrame:[[self contentView] bounds]];
        [_backgroundImageView setAlpha:0.5];
        [_backgroundImageView setOpaque:NO];
        [_backgroundImageView setBackgroundColor:[UIColor clearColor]];
        [self setBackgroundView:_backgroundImageView];
    }
    return self;
}

- (void)drawRect:(CGRect)rect {
    [super drawRect:rect];

    [_backgroundImageView setFrame:rect];
}

// in a different file
- tableView:cellForRowAtIndexPath: {
    ...
    [cell setBackgroundColor:[UIColor clearColor]];
    [cell setOpaque:NO];
    return cell;
}
4

3 に答える 3

0

問題を理解した。これは実際にUITableViewは、細胞自体ではなく、細胞との奇妙な相互作用によるものでした。前述したように、背景付きのカスタムテーブルビューを使用していますが、テーブルビューのプロパティを画像ビューに設定するのを、意味のある場所で行うのではなくUIImageView、遅らせるという間違いを犯しました。backgroundViewdrawRect:initawakeFromNib

テーブルビューの背景ビューを設定すると、実際には何らかの理由でセルの動作が変わります。以前は、で背景ビューを変更するdrawRect:と、セルはテーブルビューの背景が白であるかのように描画され、再描画されたときに更新されていました。これで、初期化メソッドに物事を移動したので、すべて問題ありません。

申し訳ありませんが、テーブルビューのコードを提供しなかったのは、問題を引き起こしている可能性があることすら思いつかなかったためです(また、私がばかで、間違ったメソッドにコード行を入力したこともありませんでした。 ...午前4時にコーディングしないでください:/)

于 2012-07-21T21:51:58.567 に答える
0

電話しましたsetNeedsDisplayか?

于 2012-07-21T09:11:19.453 に答える
0

これを取り除く

- (void)drawRect:(CGRect)rect {
    [super drawRect:rect];

    [_backgroundImageView setFrame:rect];
}

これを追加

-(void)layoutSubviews{
    [_backgroudImageVIew setFrame:self.contentView.bounds];
}

なぜあなたはこれをやっている:

[_backgroundImageView setAlpha:0.5];
于 2012-07-21T09:40:26.450 に答える