0

我有一个UITableView以 aUIImageView为背景的习俗。我想在表格中显示一些透明的单元格,这样我就可以通过单元格的背景图片看到背景图片。

到目前为止,我使用自定义将单元格设置backgroundView为 a并将背景图像视图设置为. 我还将单元格设置为.UIImageViewalphabackgroundColor[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

删除这个

- (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 回答
0

你打过电话setNeedsDisplay吗?

于 2012-07-21T09:11:19.453 回答
0

想通了问题。这实际上是由于UITableView与细胞的奇怪相互作用,而不是细胞本身。正如我所提到的,我正在使用带有UIImageView背景的自定义表格视图,但是我犯了一个错误,即延迟将表格视图的backgroundView属性设置为图像视图,直到drawRect:没有在initawakeFromNib其他任何有意义的地方进行设置。

由于某种原因,设置表格视图的背景视图实际上会改变单元格的功能。以前,当我在 中更改背景视图时drawRect:,单元格将像表格视图具有白色背景一样绘制,然后在重绘时更新。现在我已经将事情转移到初始化方法中,一切都很好。

抱歉,我没有提供表格视图的代码,因为我什至没有想到它可能会导致问题(我也没有想到我是个白痴并将一行代码放在错误的方法中...不要在凌晨 4 点编码:/)

于 2012-07-21T21:51:58.567 回答