查看清晰背景

我知道 iOS7还没有正式发布,我们不应该讨论这个问题,但是为了解决这个问题,我已经快疯了。在 iOS6上,我的表格视图是透明的,看起来很棒。第一次运行 iOS7,背景是白色的。

我已经尝试使表格背景颜色,单元格颜色等 UIColor 清除颜色,但没有改变。

如何解决这个问题?

the table

97193 次浏览

In my app, I had to set the backgroundColor on my UITableViewCell class to [UIColor clearColor] color when I updated for iOS 7.

Put this:

cell.backgroundColor = [UIColor clearColor];

In this section:

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

in cellForRowAtIndexPath

Also, make sure that your tableview actually has transparent background (in storyboard): enter image description here

This is quite a frustrating problem. Here's my current solution:

Add this to your UITableViewCell subclass.

- (void)didMoveToSuperview {
[super didMoveToSuperview];


self.backgroundColor = [UIColor clearColor];
}

Try setting backgroundView to nil first.

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

Not sure if this is a change in documentation with iOS7 or has always been there and just did not affect background color, but per UITableView Class Reference @property backgroundView

"You must set this property to nil to set the background color of the table view."

edit: corrected code syntax

In my case the cell was created using a xib. it seems like interface builder on xcode5 has trouble setting clearColor to the cell.backgroundColor.

All I needed to do was indeed to set

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// get the cell from the nib
//then force the backgroundColor
cell.backgroundColor = [UIColor clearColor]
return cell;
}

try this code snippet

cell.contentView.backgroundColor = [UIColor clearColor];
cell.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.5];

Actually the officially correct place to change cell background color is different according to documentation (UITableViewCell Class Reference):

Whether you use a predefined or custom cell, you can change the cell’s background using the backgroundView property or by changing the inherited backgroundColor property. In iOS 7, cells have a white background by default; in earlier versions of iOS, cells inherit the background color of the enclosing table view. If you want to change the background color of a cell, do so in the tableView:willDisplayCell:forRowAtIndexPath: method of your table view delegate.

This worked for me in iOS7+:

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

and then in cellForRowAtIndexPath:

cell.backgroundColor = [UIColor clearColor];
// Fix iOS 7 clear backgroundColor compatibility
// I Think this two lines only are enough


cell.backgroundColor = [UIColor clearColor];
cell.selectedBackgroundView = [[UIView new] autorelease];

Try

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

And

cell.backgroundColor = [UIColor clearColor];

This has been answered, but incorrectly in a lot of ways.

You need to implement the below delegate method:

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

You can't put the fix in cellForRowAtIndexPath because that is after the cell is rendered, and it will flash a white background before the background gets set to clear (on slower devices).

Use this delegate method and your problems are solved!

One thing to nice. The default color of UITable seems to be white (I don't know why)

Background white

But better change that.

First set

tableView.backgroundColor = [UIColor clearColor];

Second set

tableCell.backgroundColor = [UIColor clearColor];

swift 3, 4 and 5

cell.backgroundColor = UIColor.clear

Just select Clear Color on View Background for the table and for the cell also.

This did only work for me when i edited a clear background color for each cell and a clear color for the table itself.. BOTH PROGRAMMATICALLY

to set the clear color for the table:

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

to set the color for the cells:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("tablecellid", forIndexPath: indexPath)
cell.backgroundColor = UIColor.clearColor()
return cell
}

create IB Outlet for table view @IBOutlet weak var yourTable : UITableView!

in view load

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


yourTable.backgroundColor = UIColor.clearColor()
}

if you want to clear color of Cell also do this in

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


cell.backgroundColor = UIColor.clearColor()


}

Set

tableView.backgroundColor = [UIColor clearColor];

in viewDidLoad.

if this is not working, try:

tableView.backgroundView = nil;

In swift 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
}

swift 3

override func viewDidLoad() {
super.viewDidLoad()
tableView.backgroundColor = UIColor.clear
}