UITableViewCell显示白色背景,无法在iOS7上修改

时间:2013-09-18 17:08:20

标签: ios objective-c cocoa-touch ios7

我实现了一个继承自UITableViewCell的自定义表格视图单元格类。 tableview包含一个背景图片,所以我希望单元格的背景是透明的。它在iOS7之前看起来很棒。

但是,在iOS7中,单元格始终显示为白色背景。


即使对于Xcode7,2015,是故事板中的错误:您必须在代码中设置单元格的背景颜色。

14 个答案:

答案 0 :(得分:383)

正如Apple DOC所说(UITableViewCell Class Reference):

  

... 在iOS 7中,默认情况下单元格为白色背景;在早期版本的iOS中,单元格继承封闭表视图的背景颜色。如果要更改单元格的背景颜色,请在表视图委托的 tableView:willDisplayCell:forRowAtIndexPath: 方法中执行此操作。

因此,对于我的情况,要显示具有透明背景的单元格,只需要在表视图控制器中实现委托方法,如下所示:

- (void)tableView:(UITableView *)tableView
  willDisplayCell:(UITableViewCell *)cell
forRowAtIndexPath:(NSIndexPath *)indexPath
{
  [cell setBackgroundColor:[UIColor clearColor]];
}

请注意:正如@null所说,“......界面构建器中似乎有一个错误...”,我不完全确定是否它确实有这个错误,但似乎是因为他的评论得到了几个投票。如果你使用IB,可能会出现问题。 :)

答案 1 :(得分:66)

我调查了一下,发现单元backgroundColor是由Appearance系统设置的。因此,如果应用程序中的所有单元格都具有明确的背景,那么最简单的解决方案是:

[[UITableViewCell appearance] setBackgroundColor:[UIColor clearColor]];

即使它们具有不同的背景,清晰的颜色似乎是最方便的默认颜色。

答案 2 :(得分:30)

在返回单元格之前将其写入cellForRowAtIndexPath方法;

cell.backgroundColor = [UIColor clearColor];

答案 3 :(得分:13)

iOS 7中UITableViewCell的默认背景颜色为白色。

您必须在代码中的某处设置backgroundColor属性。例如,在新创建单元格后设置它。

cell.backgroundColor = [UIColor clearColor];

答案 4 :(得分:13)

我实际上发现问题是由于UITableView的背景颜色没有设置为清除。如果您将UITableViewCell的背景颜色更改为清除并且您发现仍然看到白色,请确保将UITableView的背景颜色设置为清除(或任何您想要的颜色)。

[self.tableView setBackgroundView:nil];
[self.tableView setBackgroundColor:[UIColor clearColor]];

在Swift中

tableView.backgroundView = nil
tableView.backgroundColor = UIColor.clearColor()

答案 5 :(得分:10)

这绝对是一个iOS错误。在iOS 8中,在Interface Builder中设置背景颜色适用于iPhone,但在iPad中它总是whiteColor。要解决此问题,请在cellForIndexPath数据源消息中,将其放入:

cell.backgroundColor = cell.backgroundColor

它会起作用。这正是我说这是一个错误的原因,因为代码本身几乎是蹩脚的,但它确实有效。

答案 6 :(得分:4)

默认情况下可能是你的UITableViewCell被选中了。你可以使用Xcode 6s new visual debugger来确认这一点(或者找出导致这个白色单元出现的确切视图)。

enter image description here

有趣的是,在知道了这一点之后..设置所选单元格的背景颜色以清除仍然不起作用..做了一些更多的研究,结果我只需要修改选择样式时我正在创建这个自定义单元格:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // do customization here
    }
    self.selectionStyle = UITableViewCellSelectionStyleNone;
    [self setBackgroundColor:[UIColor clearColor]];
    return self;
}

答案 7 :(得分:3)

我发现上述所有内容都不适用于XCode 5.1.1,iOS 7.1。

如果您正在使用Interface Builder和原型单元格,请选择原型单元格,然后从“视图”部分的属性选择器中,将“背景”窗体默认值更改为“清除颜色”:

enter image description here

这似乎工作正常。也不需要上述代码更改 - 这是一个纯粹的IB解决方案。

答案 8 :(得分:2)

接受的答案并没有解决我的问题。我不得不这样做:

  1. 在界面构建器中,选择表视图。然后从属性检查器中,从视图部分,将背景设置为透明(0%不透明度)。
  2. enter image description here

    1. 从表的数据源类cellForRowAtIndexPath方法:

      cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
          reuseIdentifier:CellIdentifier];
      cell.backgroundColor = [UIColor clearColor]; //Make cell transparent
      

答案 9 :(得分:2)

对我来说 cell.backgroundColor = cell.contentView.backgroundColor;tableView:willDisplayCell:forRowAtIndexPath:tableView:cell:forRowAtIndexPath:完成了这项工作。

这是因为我根据需要在Interface Builder中设置了contentView的背景颜色。

答案 10 :(得分:1)

在向单元格添加UI对象时,Xcode 5 / IOS 7添加了一个新的“内容视图”,它将成为单元格中所有元素的超级视图。要设置单元格的背景颜色,请设置此内容视图的背景颜色。上面的解决方案对我没有用,但这个对我来说效果很好。

答案 11 :(得分:1)

Swift 1.2 Solution:

Just add an explicit definition for your cell's background color like so:

MongoError: The dotted field 'eventbrite.entrantId' in 'eventbrite.entrantId' is not valid for storage

答案 12 :(得分:1)

有类似的问题,不得不

  1. 将blue设置为selectionStyle和
  2. 将此内容添加到代码中以进行更正

    override func tableView(tableView: UITableView, shouldHighlightRowAtIndexPath indexPath: NSIndexPath) -> Bool {
    
      var bgColorView: UIView = UIView()
      bgColorView.backgroundColor = UIColor(red: (76.0 / 255.0), green: (161.0 / 255.0), blue: (255.0 / 255.0), alpha: 1.0)
      bgColorView.layer.masksToBounds = true
      tableView.cellForRowAtIndexPath(indexPath)!.selectedBackgroundView = bgColorView
      return true
    }
    

答案 13 :(得分:0)

您还可以使用颜色代码,以使您的UITableView Cell获利丰厚。

[cell setBackgroundColor:[self colorWithHexString:@"1fbbff"]];

这是应用颜色代码方法的代码:

-(UIColor*)colorWithHexString:(NSString*)hex
{
    NSString *cString = [[hex stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];


    if ([cString length] < 6) return [UIColor grayColor];

    if ([cString hasPrefix:@"0X"]) cString = [cString substringFromIndex:2];

    if ([cString length] != 6) return  [UIColor grayColor];

    NSRange range;
    range.location = 0;
    range.length = 2;
    NSString *rString = [cString substringWithRange:range];

    range.location = 2;
    NSString *gString = [cString substringWithRange:range];

    range.location = 4;
    NSString *bString = [cString substringWithRange:range];

    unsigned int r, g, b;
    [[NSScanner scannerWithString:rString] scanHexInt:&r];
    [[NSScanner scannerWithString:gString] scanHexInt:&g];
    [[NSScanner scannerWithString:bString] scanHexInt:&b];

    return [UIColor colorWithRed:((float) r / 255.0f)
                         green:((float) g / 255.0f)
                          blue:((float) b / 255.0f)
                         alpha:1.0f];
}