'How do I make this UITableView clear (transparent) in Swift 3
How do I make this UITableView and it's cells clear in Swift 3.
I have gone through the previous threads but I am still getting a white background.
As you can see from my code I have tried the various methods mentioned:
override func viewDidLoad() {
self.communitiesTableView.delegate = self
self.communitiesTableView.dataSource = self
let background = CAGradientLayer().bespokeColor()
background.frame = self.view.bounds
// view.addSubview(background)
super.viewDidLoad()
// Do any additional setup after loading the view.
}
and in my cell table function:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let title = self.communities[indexPath.row]
let cell = UITableViewCell()
cell.textLabel?.text = title
cell.textLabel?.font = UIFont(name: "Avenir", size: 12)
cell.textLabel?.textColor = UIColor.red
cell.textLabel?.backgroundColor = UIColor.clear
cell.contentView.backgroundColor = UIColor.clear
communitiesTableView.backgroundColor = UIColor.clear
cell.layer.backgroundColor = UIColor.clear.cgColor
return cell
}
This gif shows the problem - notice the black lines showing the table is present just not populated (as no-one is logged in)
But for a second it is clear, then turns white. Where am I going wrong?
This is from another post that I have found:
Apple document says
... 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.
You might need to use willDisplayCell UITableView delegate method to have a transparent background for your table view .
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cellforRowAtIndexPath:(NSIndexPath *)indexPath
{
[cell setBackgroundColor:[UIColor clearColor]];
}
How do I apply the code above as it says its for iOS 7?
Solution 1:[1]
You can try this
In viewDidLoad:
tableView.backgroundColor = UIColor.clear
In cellForRowAt:
cell.contentView.backgroundColor = UIColor.clear
It's work for me.
Solution 2:[2]
You have to set both table and cell background clear.
Inside tableView function:
tableView.backgroundColor = .clear
cell.backgroundColor = .clear
tableView.tableFooterView = UIView()
Solution 3:[3]
The two first answer doesn't work for me so I add a clear background everywhere and the white bg go away.
cell.layer.backgroundColor = UIColor.clear.cgColor
cell.backgroundColor = .clear
tableView.layer.backgroundColor = UIColor.clear.cgColor
tableView.backgroundColor = .clear
SWIFT 5.5.3
Solution 4:[4]
For this to work you have to implement a new tableview method:
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell,
forRowAt indexPath: IndexPath) {
cell.backgroundColor = UIColor.clear
}
Solution 5:[5]
You are missing setting the background colour of contentView of the cell.
cell.contentView.backgroundColor = UIColor.clear
Solution 6:[6]
Maybe, you can check your table view's alpha.
Solution 7:[7]
Setting these wont be enough as you have not applied clear color to the contentView of the tableView and so it is coloring white in it. Try this in cellForRowAtIndexPath
cell.contentView.backgroundColor = UIColor .clearColor()
Solution 8:[8]
Make sure in the Identity Inspector you have Custom Class -> Class "YourCustomClassCellName" selected in the Drop Down Menu. With your UITableViewCell selected in Interface Builder, make sure your Identifier is "YourCellName" and then in the func tableView(_ tableViewL UITableView, cellForRowAt) method before the return cell that you have cell.backgroundColor = UIColor.clear i.e,
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCell(withIdentifier: "YourCellName", for: indexPath) as? YourCellNameClass {
cell.configureCell(parameter: ClassDataModel[indexPath.row])
cell.backgroundColor = UIColor.clear
return cell
} else {
return UITableViewCell()
}
I had the same issue and wrote all the code before I checked to see make sure my CellClass was selected and face palmed when I spent an hour wondering why it worked on another viewController and not in this instance. Even if you use IB to clear out the default white backgrounds, you still have to write the cell.backgroundColor = UIColor.clear. I was like yep, I found another bug in 8.2.1, but no just an iD10t operator bug.
Solution 9:[9]
I tested using swift 3. It's working
uiTableName.backgroundView = nil
uiTableName.backgroundColor = UIColor.clear
Solution 10:[10]
In the Storyboard for the TableView and TableViewCell, instead of setting the background to "Clear/Default" set the background to white (or any color) with an opacity of 0.
Also make sure you set the ContentView background to clear, but the TableViewCell is what was tripping me up. By doing this you shouldn't need to do anything in the code.
Solution 11:[11]
In Swift 4, Write the following code under viewDidLoad of your desired class:-
tableView.backgroundColor = UIColor.clear
Write the following code under the cellForRowAt i.e dataSource of your tableView:-
let cell = tableView.dequeueReusableCell(withIdentifier: "CellIdentifierName", for: indexPath) as! UITableViewCell //Cell ClassName
cell.layer.backgroundColor = UIColor.clear.cgColor
return cell
Solution 12:[12]
Why nobody said about this?:
@IBOutlet weak var tableView: UITableView!
// Drag and drop the tableView from the storyboard
override func viewDidLoad() {
super.viewDidLoad()
tableView.isHidden = true
}
The result gives you an opportunity to hide the whole tableView with a single line.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow

