在我强制重新加载单元格之前,表格视图单元格是不透明的?

时间:2012-07-21 08:53:01

标签: ios cocoa-touch uitableview

我有一个自定义UITableView,其背景为UIImageView。我想在表格中显示一些透明单元格,以便通过单元格的背景图像可以看到背景图像。

到目前为止,我正在使用自定义backgroundView将单元格的UIImageView设置为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;
}

3 个答案:

答案 0 :(得分:0)

您是否致电setNeedsDisplay

答案 1 :(得分:0)

删除此

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

    [_backgroundImageView setFrame:rect];
}

添加此

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

你为什么这样做:

[_backgroundImageView setAlpha:0.5];

答案 2 :(得分:0)

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

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

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