92

我意识到 iOS 7 尚未正式发布,我们不应该讨论它,但我正在疯狂地试图找出这个问题。在 iOS 6 上,我的表格视图是透明的并且看起来很棒。第一次运行iOS 7,背景是白色的。

我尝试将表格背景颜色、单元格颜色等设置为 UIColor clearColor 但没有任何变化。

如何解决这个问题?

桌子

4

21 回答 21

125
    // Fix for iOS 7 to clear backgroundColor
    cell.backgroundColor = [UIColor clearColor];
    cell.backgroundView = [[UIView new] autorelease];
    cell.selectedBackgroundView = [[UIView new] autorelease];

在 cellForRowAtIndexPath 中

另外,请确保您的 tableview 实际上具有透明背景(在故事板中): 在此处输入图像描述

于 2013-09-12T16:40:56.377 回答
58

把这个:

cell.backgroundColor = [UIColor clearColor];

在这个部分:

cellForRowAtIndexPath
于 2013-09-12T04:08:24.487 回答
25

首先尝试将 backgroundView 设置为 nil。

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

不确定这是否是 iOS7 文档的更改,还是一直存在,只是不影响背景颜色,但根据UITableView 类参考 @property backgroundView

“您必须将此属性设置为 nil 才能设置表格视图的背景颜色。”

编辑:更正的代码语法

于 2013-09-20T19:19:38.253 回答
25

这已经得到了回答,但在很多方面都是错误的。

您需要实现以下委托方法:

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

您不能将修复程序放在 cellForRowAtIndexPath 中,因为这是在渲染单元格之后,并且它会在背景设置为清除之前闪烁白色背景(在较慢的设备上)。

使用这个委托方法,你的问题就解决了!

于 2014-02-19T05:11:54.563 回答
15

实际上,根据文档(UITableViewCell 类参考),更改单元格背景颜色的官方正确位置是不同的:

无论您使用预定义单元格还是自定义单元格,都可以使用 backgroundView 属性或更改继承的 backgroundColor 属性来更改单元格的背景。在 iOS 7 中,单元格默认为白色背景;在早期版本的 iOS 中,单元格继承了封闭表格视图的背景颜色。如果要更改单元格的背景颜色,请在 tableView 委托的 tableView:willDisplayCell:forRowAtIndexPath: 方法中进行。

于 2013-09-27T16:05:43.483 回答
8

快速 3、4 和 5

cell.backgroundColor = UIColor.clear
于 2015-11-16T10:18:10.393 回答
6

这是一个相当令人沮丧的问题。这是我目前的解决方案:

将此添加到您的UITableViewCell子类中。

- (void)didMoveToSuperview {
    [super didMoveToSuperview];

    self.backgroundColor = [UIColor clearColor];
}
于 2013-09-16T12:20:10.730 回答
5

这在 iOS7+ 中对我有用:

self.tableView.backgroundColor =[UIColor blueColor];
self.tableView.opaque = NO;
self.tableView.backgroundView = nil;`

然后在cellForRowAtIndexPath:

cell.backgroundColor = [UIColor clearColor];
于 2013-10-11T13:43:07.167 回答
5

当我为每个单元格编辑一个清晰的背景颜色和为表格本身编辑一个清晰的颜色时,这只对我有用。

为表格设置清晰的颜色:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    initMenu()
    myTableView.backgroundColor = UIColor.clearColor()
}

设置单元格的颜色:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("tablecellid", forIndexPath: indexPath)
    cell.backgroundColor = UIColor.clearColor()
    return cell
}
于 2016-01-28T16:11:35.743 回答
4

试试这个代码片段

cell.contentView.backgroundColor = [UIColor clearColor];
cell.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.5];
于 2013-09-26T15:24:37.757 回答
3

一件好事。UITable的默认颜色好像是白色的(不知道为什么)

背景白色

但最好改变它。

于 2014-03-22T09:17:33.490 回答
3

第一组

tableView.backgroundColor = [UIColor clearColor];

第二套

tableCell.backgroundColor = [UIColor clearColor];
于 2014-12-05T08:21:42.157 回答
3

为表视图创建 IB Outlet @IBOutlet weak var yourTable : UITableView!

在视图中加载

override func viewDidLoad() {
    yourTable.delegate = self
    yourTable.dataSource = self

    yourTable.backgroundColor = UIColor.clearColor()
}

如果你想清除 Cell 的颜色,也可以在

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    cell.backgroundColor = UIColor.clearColor() 

}
于 2016-03-05T01:19:23.063 回答
2

在我的情况下,单元格是使用 xib 创建的。似乎 xcode5 上的界面生成器无法将 clearColor 设置为 cell.backgroundColor。

我需要做的只是设置

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// get the cell from the nib
//then force the backgroundColor
cell.backgroundColor = [UIColor clearColor]
return cell;
}
于 2013-09-26T14:20:31.453 回答
2

backgroundColor在我的应用程序中,UITableViewCell[UIColor clearColor]我更新iOS 7.

于 2013-09-12T00:30:41.853 回答
2

尝试

[myTable setSeparatorStyle:UITableViewCellSeparatorStyleNone];
[myTable setSeparatorInset:UIEdgeInsetsZero];

cell.backgroundColor = [UIColor clearColor];
于 2014-02-12T20:38:21.063 回答
2

迅速 3

override func viewDidLoad() {
        super.viewDidLoad()
        tableView.backgroundColor = UIColor.clear
}
于 2017-05-07T00:40:08.243 回答
2

只需为表格和单元格选择“查看背景上的清除颜色”即可。

于 2015-11-22T13:46:52.190 回答
1
// Fix iOS 7 clear backgroundColor compatibility 
// I Think this two lines only are enough

cell.backgroundColor = [UIColor clearColor];
cell.selectedBackgroundView = [[UIView new] autorelease];
于 2013-11-30T10:30:26.143 回答
0

tableView.backgroundColor = [UIColor clearColor];

在 viewDidLoad 中。

如果这不起作用,请尝试:

tableView.backgroundView = nil;
于 2016-12-15T12:28:05.037 回答
0

在迅速 3

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath)
    cell.backgroundColor = .clear
    cell.backgroundView = UIView()
    cell.selectedBackgroundView = UIView()
    return cell
}
于 2016-12-26T09:36:22.100 回答