How do I make this UITableView clear (transparent) in Swift 3

34,335

Solution 1

Note: Below code been tested in Swift 3.

Method 1:

Select your tableViewCell from your storyboard and goto Attributes Inspector under View change Background to clear

Method 2: Try below code inside your cellForRowAt

  cell.layer.backgroundColor = UIColor.clear.cgColor

enter image description here

Note : If above method didn't works.try clear your project build by pressing shift + option + command + k

Update: Update your cellForRowAt from below code...

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath as IndexPath)
    cell.textLabel?.text = communities[indexPath.row]
    cell.textLabel?.font = UIFont(name: "Avenir", size: 12)
    cell.textLabel?.textColor = UIColor.red // set to any colour 
    cell.layer.backgroundColor = UIColor.clear.cgColor

    return cell
}

Solution 2

You can try this

In viewDidLoad:

tableView.backgroundColor = UIColor.clear

In cellForRowAt:

cell.contentView.backgroundColor = UIColor.clear

It's work for me.

Solution 3

You have to set both table and cell background clear.

Inside tableView function:

tableView.backgroundColor = .clear
cell.backgroundColor = .clear
tableView.tableFooterView = UIView()

Solution 4

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.3.3

Solution 5

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
}
Share:
34,335
RDowns
Author by

RDowns

Updated on August 24, 2021

Comments

  • RDowns
    RDowns over 2 years

    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?