如何创建一个透明背景的 UITableViewCell

我试图将 UITableViewCell的背景颜色设置为透明。但似乎没什么效果。我有一些图片/按钮内的 tableViewCell,我想使白色的 grouptableview背景消失,以获得一个’浮动’的图像和按钮效果(好像他们不在 tableview)。

你知道这是怎么做到的吗?

74682 次浏览

从这些文章开始,正确设置背景颜色:

Http://howtomakeiphoneapps.com/2009/03/how-to-add-a-nice-background-image-to-your-grouped-table-view/

Http://pessoal.org/blog/2009/02/25/customizing-the-background-border-colors-of-a-uitableview/

然后试试下面所有的台词:

[[cell contentView] setBackgroundColor:[UIColor clearColor]];
[[cell backgroundView] setBackgroundColor:[UIColor clearColor]];
[cell setBackgroundColor:[UIColor clearColor]];

UITableViewCell 中隐藏的视图不止一个。这应该能把挡你路的都说清楚。

如果其他两个选项都不起作用,试试这个

UIView *backView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
backView.backgroundColor = [UIColor clearColor];
cell.backgroundView = backView;

我有一个问题,我的自定义 tableviewcell 背景图片与白色标签背景叠加,我尝试了一切,最后设置背景清晰的颜色在视图 WillAppear 的技巧。

      - (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.tableView.backgroundColor = [UIColor clearColor]; // if this is not here, cell background image is covered with a white rectangle :S
}

在 rowForCellAtIndexPath 中,我设置了背景图片:

 if(!cell) {
cell = [[[UITableViewCell alloc] initWithFrame: ...
UIImageView *cellBG = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"cellbg.jpg"]];
[cell setBackgroundView:cellBG];
[cellBG release];
}

这个问题实际上在 UITableViewCell 的文档中得到了回答。因此,虽然您必须在控件上设置透明度,但是实际的单元格背景颜色 必须的将在下面设置。

注意: 如果你想改变单元格的背景颜色(通过 UIView 声明的 background Color 属性设置单元格的背景颜色) ,你必须在数据源的 tableView: willDisplayCell: forRowAtIndexPath: 方法中而不是 tableView: cellForRowAtIndexPath: 中进行。对组样式表视图中单元格的背景颜色的更改在 iOS 3.0中产生的效果与以前版本的操作系统不同。它现在影响的是圆角矩形内部的区域,而不是外部的区域。”

Https://developer.apple.com/documentation/uikit/uitableviewcell

默认情况下,UITableViewCell 的背景是白色的。执行 myCell.backgroundColor = [UIColor clearColor];操作将使 UITableViewCell 透明,但是您不会感觉到不同,因为 UITableView (UITableViewCell 的容器)在默认情况下也有一个白色背景。

如果你想看到你的 UIView 背景,你必须让你的单元格和表格背景透明:

myTableView.backgroundColor = [UIColor clearColor];
myTableCell.backgroundColor = [UIColor clearColor];

Martin Magakian

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{


cell.backgroundColor = [UIColor clearColor];
cell.backgroundView.backgroundColor = [UIColor clearColor];
}

我有一个简单的解决方案

目标-c 版本:

cell.backgroundColor = [UIColor clearColor];

Swift 版本:

cell.backgroundColor = UIColor.clearColor()

如果您使用故事板,请确保取消选中“不透明”为您的原型 UITableViewCell

以下是我在 Swift 4.1中的解决方案:

override func viewDidLoad() {
super.viewDidLoad()
tableView.backgroundView = UIImageView(image: "Image")
}


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
cell.backgroundColor = UIColor.clear
{

有三个步骤:

  1. 背景颜色 = UIColor.clear
  2. 在“绘图”部分中取消选中“属性检查器中的表视图单元格”的不透明复选框。这可以通过单击故事板中的表视图单元格原型并打开属性检查器来找到。向下滚动,你就会找到它。
  3. 从与步骤2相同位置的下拉菜单中选择“背景为清除颜色”。
  4. 运行你的应用程序

Swift 5.1解决方案

let cell = tableView.dequeueReusableCell(withIdentifier: "cellIdentifier", for: indexPath)
cell.backgroundColor = UIColor.clear

在把我的大部分头发都拔掉之后,这对 xCode 13/Swift 5.1来说变得非常简单。有两件事需要改变。

在你的编号 OfRowsInSection 中,加上:

Background Color = UIColor.clear

看起来像这样:

   func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
tableView.backgroundColor = UIColor.clear
return 40
}

然后在你的单元格 ForRowAt 中添加:

背景颜色 = UIColor.clear

所以看起来:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell")
cell?.backgroundColor = UIColor.clear
return cell!
}

就是这样。真不敢相信我的眼睛。 :)

我已经迟到了,但是我会分享我的发现,因为它们和这里的所有答案都不一样。在花了两个小时尝试不同的解决方案之后,我仅仅通过调整 Interface Builder 中的两个属性就成功地实现了 table cell 的透明性:

  1. 将表格视图背景(在 View 部分属性检查器的底部附近)设置为 Clear Color,
  2. 将“表格视图单元格背景”(同样在“视图”部分)设置为“清除颜色”。

我不需要改变代码,对于那些仍在使用 Interface Builder 的人来说,额外的好处是表格单元格显示为透明的(而不是白色的)背景,当单元格内容项的颜色是白色时,这一点很重要:

The result