91

I realize that iOS 7 has not officially been released and we should not discuss it BUT I am going crazy trying to figure out this problem. On iOS 6, my table view was transparent and looked great. First time running iOS 7, and the background is white.

I have tried making the table backgroundColor, cell color etc etc to UIColor clearColor but have no change.

How to fix this problem?

the table

3
  • 1
    Tried setting the table's backgroundView to a clear one? Commented Sep 12, 2013 at 0:25
  • Could you show the code where you are setting the background colour? What about the parent view? Perhaps the table view background is clear but the parent isn't? Commented Sep 12, 2013 at 0:33
  • I noticed this same thing but when I installed the same app that predated my current version to iOS 7.0 it wasn't happening. Does this problem lie in xCode5.0 then? Commented Sep 23, 2013 at 13:52

21 Answers 21

125
 // 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

Sign up to request clarification or add additional context in comments.

7 Comments

George, add that code inside the method - (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
For the cases, if you really need selectedBackgroundView, you can put the following in cellForRowAtIndexPath: cell.selectedBackgroundView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"yourBgImage.png"]] autorelease]; or even in awakeFromNib: self.selectedBackgroundView = ... Note, that: self.backgroundColor = [UIColor clearColor]; does not work in awakeFromNib under iOS7. But: cell.backgroundColor = [UIColor clearColor]; works properly only in cellForRowAtIndexPath for iOS 7.0
Only need to add the row: cell.backgroundColor = [UIColor clearColor];
This works like charm cell.backgroundColor = [UIColor clearColor];
How to do this in Swift?
|
57

Put this:

cell.backgroundColor = [UIColor clearColor]; 

In this section:

cellForRowAtIndexPath 

1 Comment

In iOS 6, it is sufficient to set the backgroundView to an empty view, but this additional code is needed for iOS 7.
25

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

Comments

25

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!

1 Comment

Yes. For iOS 7 this is the way to clear the background. All the other suggestions above might not work.
15

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.

2 Comments

I am trying this, but the very first cells shown all have a white background. If I create new cells by scrolling, then they will have the transparent background I want. Not sure what else to try…
Never mind, it appears to be a timing issue. I was doing stuff in awakeFromNib, which was too early.
9

swift 3, 4 and 5

cell.backgroundColor = UIColor.clear 

Comments

6

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]; } 

1 Comment

Oh god. Thank you. Saved my night. Your answer should have been the accepted one.
5

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 } 

Comments

5

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]; 

Comments

4

try this code snippet

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

Comments

4

First set

tableView.backgroundColor = [UIColor clearColor]; 

Second set

tableCell.backgroundColor = [UIColor clearColor]; 

Comments

3

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

Background white

But better change that.

1 Comment

Perfect! That was the missing peace. No additional line of code needed!
3

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() } 

Comments

2

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

Comments

2

Try

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

And

cell.backgroundColor = [UIColor clearColor]; 

Comments

2

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; } 

1 Comment

control reaches end of non-void function
2

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

Comments

2

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 } 

1 Comment

Working for me......
2

swift 3

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

Comments

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

Comments

0

Set

tableView.backgroundColor = [UIColor clearColor]; 

in viewDidLoad.

if this is not working, try:

tableView.backgroundView = nil; 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.