web-dev-qa-db-fra.com

Comment rendre cette UITableView claire (transparente) dans Swift 3

Comment rendre cette UITableView et ses cellules claires dans Swift 3.

J'ai parcouru les discussions précédentes mais je continue à avoir un fond blanc.

Comme vous pouvez le voir dans mon code, j'ai essayé les différentes méthodes mentionnées:

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

et dans ma fonction de table de cellules:

  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

}

Ce gif montre le problème - notez que les lignes noires montrant que le tableau est présent ne sont tout simplement pas remplies (personne n’est connecté)

Mais pendant une seconde c'est clair, puis devient blanc… .. Où est-ce que je me trompe?

Ceci est d'un autre post que j'ai trouvé:

Le document Apple dit

... Dans iOS 7, les cellules ont un fond blanc par défaut; Dans les versions antérieures d'iOS, les cellules héritent de la couleur d'arrière-plan de la vue tabulaire englobante. Si vous souhaitez modifier la couleur d'arrière-plan d'une cellule, utilisez la méthode tableView: willDisplayCell: forRowAtIndexPath: de votre délégué de la vue de table.

Vous devrez peut-être utiliser la méthode déléguée willDisplayCell UITableView pour obtenir un arrière-plan transparent pour votre vue tableau.

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cellforRowAtIndexPath:(NSIndexPath *)indexPath

{
  [cell setBackgroundColor:[UIColor clearColor]];
}

Comment puis-je appliquer le code ci-dessus car il est écrit pour iOS 7?

15
RDowns

Remarque: Le code ci-dessous a été testé dans Swift 3.

Méthode 1:

Sélectionnez votre tableViewCell dans votre storyboard et passez à Attributes Inspector sous View changez Background en clear

Méthode 2: Essayez le code ci-dessous dans votre cellForRowAt

  cell.layer.backgroundColor = UIColor.clear.cgColor

 enter image description here

Remarque: Si la méthode ci-dessus n'a pas fonctionné, effacez la construction de votre projet en appuyant sur shift + option + command + k

Update: Mettez à jour votre cellForRowAt à partir du code ci-dessous ...

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
}
38
Joe

Tu peux essayer ça

Dans viewDidLoad

tableView.backgroundColor = UIColor.clear

Dans cellForRowAt:  

cell.contentView.backgroundColor = UIColor.clear

C'est un travail pour moi.

9
Eugene Lezov

Vous devez définir à la fois le fond du tableau et celui de la cellule.

Dans la fonction tableView:

tableView.backgroundColor = .clear
cell.backgroundColor = .clear
tableView.tableFooterView = UIView()
7
antti-ka

Pour que cela fonctionne, vous devez implémenter une nouvelle méthode tableview:

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell,
               forRowAt indexPath: IndexPath) {
    cell.backgroundColor = UIColor.clear
}
4
Hiram Elguezabal

Les deux premières réponses ne fonctionnent pas pour moi, alors j'ajoute un fond clair partout et le blanc disparaît.

cell.layer.backgroundColor = UIColor.clear.cgColor
cell.backgroundColor = .clear
tableView.layer.backgroundColor = UIColor.clear.cgColor
tableView.backgroundColor = .clear

Swift 4

3
El-Burritos

Il vous manque la définition de la couleur d'arrière-plan de contentView de la cellule.

cell.contentView.backgroundColor = UIColor.clear

2
dlbuckley

Peut-être pouvez-vous vérifier l'alpha de votre vue de table.

1
Barış Özçelik

Assurez-vous que dans l'inspecteur d'identité vous avez sélectionné Classe personnalisée -> Classe "YourCustomClassCellName" sélectionnée dans le menu déroulant. Avec votre UITableViewCell sélectionnée dans Interface Builder, assurez-vous que votre identifiant est "YourCellName", puis dans la méthode func tableView (_ tableViewL UITableView, cellForRowAt) avant la cellule de retour que vous avez 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()
    } 

J'avais le même problème et écrit tout le code avant de vérifier si ma CellClass était sélectionnée et si ma tête était pâlie lorsque je passais une heure à me demander pourquoi cela fonctionnait sur un autre viewController et non dans ce cas. Même si vous utilisez IB pour supprimer les fonds blancs par défaut, vous devez toujours écrire cell.backgroundColor = UIColor.clear. J'étais comme eh oui, j'ai trouvé un autre bogue dans 8.2.1, mais pas simplement un bogue d'opérateur iD10t. 

1
Cory Billeaud

J'ai testé avec Swift 3. Ça marche  

uiTableName.backgroundView = nil
uiTableName.backgroundColor = UIColor.clear
1
Thinesh