2017-09-28 12 views
0

Ich habe ein Problem mit Transparenz in meinen Ansichten, vor allem mit UITableView.Swift 4 backgroundColor Fehler?

Nur um sicher zu gehen. Ich habe bereits 3 Jahre Erfahrung mit swift und dies ist das erste Mal, ich bekomme dieses Problem.

So in Apples docs sagt der folgende: backgroundColor Die Hintergrundfarbe der Ansicht.

Änderungen an dieser Eigenschaft können animiert werden. Der Standardwert ist gleich Null, die in einem transparenten Hintergrundfarbe zur Folge hat.“

Aber wenn klare Farbe zu backgroundColor oder tableView.backgroundColor = UIColor.clear Anwendung wird der Hintergrund immer noch weiß erscheinen.

Ist das ein Bug oder ein Feature?

EDIT:

der Tableview ist nicht das Problem mehr Es ist die Zelle in der Tableview bereits versucht, Lösungen, um die Hintergrundfarbe aller Subviews räumen nichts geändert

0....

EDIT 29.09.17

Ok, gedebuggt ich meine Bewerbung und bekam dies:

UICachedDeviceWhiteColor und cachedColor.

UICachedDeviceWhiteColor

Eine Google auch nicht helfen suchen.

bearbeiten 2017.09.29 Später an diesem Tag ...

Das Problem tritt auf, wenn von einem schnellen 3 bis swift 4. Aktualisierung habe ich ein neues Projekt mit schnellen 4, aber es funktioniert tatsächlich gut. Weil es ein Problem ist, muss ich lösen. Ich werde einige Dinge versuchen und diesen Beitrag von Zeit zu Zeit aktualisieren.

+2

Es gibt 'contentView' oben auf' backgroundView', spielen mit dieser Ansicht um. – Desdenova

+0

Können Sie uns den vollständigen Code zeigen? –

+0

Sie sollten Ihre Ansichtshierarchie überprüfen, es könnte sein, dass hinter Ihrer UITableView eine andere UIView mit einer .white backgroundColor vorhanden ist. –

Antwort

0

das Problem gefunden: Wenn eine Variable Instanziierung, die vor der Ansicht, hält sie die Anzeige, die Hintergrundfarbe dieser weiß ist. Der Debugger ruft diese UICachedDeviceWhiteColor auf.

Warum würden Sie das tun? Wenn Sie die Ansicht instanziiert, bevor es angezeigt wird, können Sie mit einem Menü zwischen verschiedenen Ansichten wechseln sehr schnell mit „bringSubview (toFront: ...).

Wie zu beheben: dies beheben Sie die instanziiert müssen sehen Sie jedes Mal, es zeigen möchten.

Hoffnung, ich könnte ein paar verlorene Seelen mit dieser Antwort helfen und Apple wird diesen Fehler beheben.

0

Vergewissern Sie sich, dass die Ansicht dahinter nicht weiß ist, und legen Sie dann die aktuelle Ansicht (die mit dem transparenten Hintergrund) modalPresentationStyle auf overCurrentContext fest. Auf diese Weise können Ansichten hinter der UIColor.clear-Hintergrundfarbe angezeigt werden.

+0

Entschuldigung, die Lösung funktioniert nicht. – user2982195

+0

Bitte Google "Swift Modal Präsentationsstil", um eine detaillierte Anleitung zu finden. Um eine Ansicht mit einer klaren Hintergrundfarbe zu sehen, müssen Sie dies erfolgreich durchführen. –

1

In UITableViewCell und UICollectionViewCell gibt es eine Eigenschaftsansicht namens contentView.

Ein häufiger Fehler ist die Zelle direkt zu manipulieren. Stattdessen versuchen, die Zellen Inhalt Ansicht zu manipulieren:

Obj-c 

UITableViewCell *cell = ....// get the cell 

cell.backgroundColor = ... // BAD ! 

cell.contentView.backgroundColor = [UIColor redColor] // this is the correct way. 

Swift

let cell = ... 
cell.contentView.backgroundColor = UIColor.red // make sure its the contentView 

auch ein paar kleine Nuancen mit Farben und Opazität:

Wenn Sie nur der Hintergrund haben wollen Opazität (dh weniger als 100%), stellen Sie sicher, dass Sie nicht ändern die Opazität der Ansicht (dhview.alpha = 0.5 BAD) - die Opazität Wert der Farbe ändern statt:

heißt

cell.contentView.backgroundColor = [UIColor colorWithRed:... green:... blue:... alpha:0.5]; 

Ein weiterer nützlicher Trick ist, die Anwendung und drücken Sie die "visual debug" Taste pausieren.

Suche nach Ihrer Ansicht und die Attribute im Inspektor überprüfen

0

wenn Sie

tableView.backgroundColor = .red 

setzen und wenn es ein emp ty TableView wird dann der Red sichtbar sein. Ich gebe auch eine HeaderView und FooterView zur Visualisierung.

simulator screen shot - iphone se - 2017-12-09 at 16 02 40

Jetzt Tableview Inhalt einige Daten, so dass die Farbe reflektieren Sie benötigen Hintergrundfarbe zu Zelle einzustellen.

class UserCell: UITableViewCell { 

override func awakeFromNib() { 
    super.awakeFromNib() 
} 

override func layoutSubviews() { 
    super.layoutSubviews() 
    backgroundColor = .yellow 
} 
.... 
} 

simulator screen shot - iphone se - 2017-12-09 at 16 04 18 simulator screen shot - iphone se - 2017-12-09 at 16 04 30

You can check out the original project here.