2017-10-05 2 views
0

J'ai ajouté un UIView en utilisant le storyboard et en le sous-classant. Dans cette vue, j'ajoute un UITableView par programmation. Voici le code pour créer la tableview et l'ajouter:Définir la couleur d'arrière-plan de UITableView par programmation ne fonctionne pas

private func commonInit() { 
    self.backgroundColor = .clear 

    self.categoryTableView = UITableView(frame: CGRect(x: 0, y: 0, width: self.frame.width, height: self.frame.height)) 

    categoryTableView?.delegate = self 
    categoryTableView?.dataSource = self 

    self.categoryTableView?.backgroundView = nil 
    self.categoryTableView?.backgroundColor = .yellow 

    self.categoryTableView?.isScrollEnabled = false 
    self.categoryTableView?.allowsMultipleSelection = true 

    self.addSubview(categoryTableView!) 
} 

Voici à quoi ça ressemble. Je me attends à l'arrière-plan de la tableview être jaune (il est blanc dans la capture d'écran)

J'ai également définir la couleur d'arrière-plan des cellules pour effacer ce qui semble fonctionner. Quand je regarde la hiérarchie de l'interface utilisateur, il est assez évident que le blanc provient de la tableview.

Je me sens comme cela devrait être vraiment détroit avant. La partie étrange est les lignes self.categoryTableView?.isScrollEnabled = false et self.categoryTableView?.allowsMultipleSelection = true semblent toutes deux fonctionner, mais le changement de couleur de fond ne l'est pas.

+2

Définissez la couleur d'arrière-plan dans le fil principal. –

+0

@BadhanGanesh Yep qui l'a réparé. Merci! – keverly

Répondre

0

J'ai testé cela dans un terrain de jeu, et le résultat était comme prévu.

import UIKit 
import XCTest 
import PlaygroundSupport 


let view = UIView(frame: CGRect(x: 0, y: 0, width: 500, height: 500)) 
PlaygroundPage.current.liveView = view 

view.backgroundColor = UIColor.blue 

let tableView = UITableView(frame:CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height)) 
tableView.backgroundColor = UIColor.yellow 
view.addSubview(tableView) 

Le résultat:

colored tableview

Je suppose autre chose est en cours de réalisation ici. Peut-être quelque chose avec le dimensionnement des cadres, ou lorsque vous appelez la méthode commonInit()?

+0

'commonInit()' est appelé depuis 'init requis '(codeur aDecoder: NSCoder)'. Je pense que cela pourrait être une partie du problème puisque la définition de la couleur d'arrière-plan dans le fil principal (comme @Badhan Ganesh suggéré) semblait avoir résolu le problème. Peut-être que l'appel de fonctions à partir de 'init requis '(coder aDecoder: NSCoder)' le fait fonctionner sur un thread autre que le thread de l'interface utilisateur. – keverly