Reputation: 3854
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?
Upvotes: 91
Views: 99151
Reputation: 12034
swift 3
override func viewDidLoad() {
super.viewDidLoad()
tableView.backgroundColor = UIColor.clear
}
Upvotes: 2
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
Reputation: 16160
Set
tableView.backgroundColor = [UIColor clearColor];
in viewDidLoad.
if this is not working, try:
tableView.backgroundView = nil;
Upvotes: 0
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
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
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
Reputation: 27
Just select Clear Color on View Background for the table and for the cell also.
Upvotes: 2
Reputation: 61
First set
tableView.backgroundColor = [UIColor clearColor];
Second set
tableCell.backgroundColor = [UIColor clearColor];
Upvotes: 4
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):
Upvotes: 125
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
Reputation: 2743
One thing to nice. The default color of UITable seems to be white (I don't know why)
But better change that.
Upvotes: 3
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
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
Reputation: 21
Try
[myTable setSeparatorStyle:UITableViewCellSeparatorStyleNone];
[myTable setSeparatorInset:UIEdgeInsetsZero];
And
cell.backgroundColor = [UIColor clearColor];
Upvotes: 2
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
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
Reputation: 2332
try this code snippet
cell.contentView.backgroundColor = [UIColor clearColor];
cell.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.5];
Upvotes: 4
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
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
Reputation: 709
Put this:
cell.backgroundColor = [UIColor clearColor];
In this section:
cellForRowAtIndexPath
Upvotes: 57