web-dev-qa-db-fra.com

Challenge UITableView/UITableViewCell avec fond transparent sur iPad avec iOS7

La nuit dernière, j'ai décidé de passer à Xcode 5 et de jeter un coup d'œil à mon projet actuel. Après la mise à jour de mes story-boards sur la nouvelle interface utilisateur, tout avait l'air génial et fonctionnait bien. Comme j'ai un binaire universel, j'ai décidé de tester également des choses sur iPad et j'ai remarqué qu'un nouveau fond blanc avait été introduit dans mon UITableview, une couleur transparente/claire. Cela semble se produire au niveau de la cellule, pas au niveau de la table. Lorsque j'exécute des tâches sur le simulateur 6.1, tout se passe bien pour iPad et iPhone. Et tout va bien sur iPhone pour iOS7. 

Tout ce que j'ai configuré pour le constructeur d'interface est identique pour iPhone et iPad. D'après ce que je peux dire, cela a quelque chose à voir avec cette nouvelle "vue du contenu" (qui est un sous-groupe de la cellule de poste) ne respectant pas une valeur/paramètre transparent.

Des pensées/idées?

33
Causaelity

Après avoir perdu plusieurs heures avec le constructeur d'interface, je pense qu'il pourrait y avoir un bug là-dedans. J'ai donc commencé à chercher une réponse programmatique. Apparemment, si j'avais commencé ici, j'aurais pu économiser beaucoup de temps. En ajoutant à la méthode:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

J'ai pu résoudre le problème de transparence sur iPad en ajoutant cette ligne:

cell.backgroundColor = [UIColor clearColor];  // Adding this fixes the issue for iPad

J'espère que cela aidera tout le monde avec le fond blanc vu pour iPad avec des tables et iOS7!

103
Causaelity

Si vous utilisez un UITableViewCell personnalisé et que vous l'appelez à partir de storyboard/xib, vous pouvez utiliser le code suivant.

@implementation YourCustomTableViewCell

- (void) awakeFromNib
{
    self.backgroundColor = [UIColor clearColor];
}
4
user3164248

Si quelqu'un d'autre a toujours des problèmes avec la transparence de la vue de la table et de la table sur l'iPad, cela peut aider (copie de https://stackoverflow.com/a/31396483/2301213 , elle est dans Swift depuis l'époque où ils sont changin ')

Il semble que quelque part dans le processus d’ajout d’un UITableView à la fenêtre (entre willMoveToWindow et didMoveToWindow), certains iPad réinitialisent le backgroundColor de la vue Table en blanc. Il le fait secrètement sans utiliser la propriété backgroundColor. 

J'utilise maintenant ceci comme classe de base à la place de UITableView lorsque j'ai besoin d'une table colorée/transparente ...

class ColorableTableView : UITableView {
    var _backgroundColor:UIColor?
    override var backgroundColor:UIColor? {
        didSet {
            _backgroundColor = backgroundColor
        }
    }
    override func didMoveToWindow() {
        backgroundColor = _backgroundColor
        super.didMoveToWindow()
    }
}

La couleur de fond des cellules est également définie sur blanc sur mon iPad de la même manière (c'est-à-dire celles qui figurent dans le tableau lors du déplacement vers la fenêtre). Il en va de même pour elles, de peur que vous ne vous retrouviez avec une étrange cellule opaque de temps en temps comme il est réutilisé ...

class ColorableTableViewCell : UITableViewCell {
    var _backgroundColor:UIColor?
    override var backgroundColor:UIColor? {
        didSet {
            _backgroundColor = backgroundColor
        }
    }
    override func didMoveToWindow() {
        backgroundColor = _backgroundColor
        super.didMoveToWindow()
    }
}
3
wils

Si vous utilisez une table de cellules statiques. vous pouvez faire ce qui suit:

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {

     cell.backgroundColor = UIColor.clearColor()
}
0
Ace Green