Teddy13
Teddy13

Reputation: 3854

UITableView clear background

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

Upvotes: 91

Views: 99151

Answers (21)

Jamal alaayq
Jamal alaayq

Reputation: 146

swift 3, 4 and 5

cell.backgroundColor = UIColor.clear

Upvotes: 9

Benjamin RD
Benjamin RD

Reputation: 12034

swift 3

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

Upvotes: 2

Patricio Bravo
Patricio Bravo

Reputation: 416

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
}

Upvotes: 2

Lal Krishna
Lal Krishna

Reputation: 16160

Set

tableView.backgroundColor = [UIColor clearColor];

in viewDidLoad.

if this is not working, try:

tableView.backgroundView = nil;

Upvotes: 0

DevC
DevC

Reputation: 7022

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

Upvotes: 5

veenaay pawar
veenaay pawar

Reputation: 31

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

}

Upvotes: 3

SoliQuiD
SoliQuiD

Reputation: 2193

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
}

Upvotes: 5

Walter Barlet
Walter Barlet

Reputation: 27

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

Upvotes: 2

Fantasyczl
Fantasyczl

Reputation: 61

First set

tableView.backgroundColor = [UIColor clearColor];

Second set

tableCell.backgroundColor = [UIColor clearColor];

Upvotes: 4

slamor
slamor

Reputation: 3365

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

Upvotes: 125

Ben G
Ben G

Reputation: 3975

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

Upvotes: 2

Paweł Brewczynski
Paweł Brewczynski

Reputation: 2743

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

Background white

But better change that.

Upvotes: 3

edhnb
edhnb

Reputation: 2192

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!

Upvotes: 25

dandan
dandan

Reputation: 391

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

Upvotes: 25

Jorgy
Jorgy

Reputation: 21

Try

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

And

cell.backgroundColor = [UIColor clearColor];

Upvotes: 2

Kiran Jasvanee
Kiran Jasvanee

Reputation: 6554

// Fix iOS 7 clear backgroundColor compatibility 
// I Think this two lines only are enough

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

Upvotes: 1

asdusd
asdusd

Reputation: 151

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.

Upvotes: 15

Stornu2
Stornu2

Reputation: 2332

try this code snippet

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

Upvotes: 4

Berk
Berk

Reputation: 367

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

Upvotes: 6

Arthur Dexter
Arthur Dexter

Reputation: 126

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

Upvotes: 2

Maximus Vermillion
Maximus Vermillion

Reputation: 709

Put this:

cell.backgroundColor = [UIColor clearColor];

In this section:

cellForRowAtIndexPath

Upvotes: 57

Related Questions