Ich arbeite an einem Projekt. Ich habe viele UITableView
s, die als klare Farbe eingestellt sind. Die Hintergrundfarbe ihrer Ansichten ist auf meine benutzerdefinierte Farbe eingestellt und auf dem iPhone ist alles in Ordnung .
Das Problem tritt auf dem iPad auf ! Ich habe fast alles versucht, aber meine UITableView
hat eine weiße Farbe.
Ich habe die anderen Themen überprüft, wie: UITableView backgroundColor auf dem iPad immer grau , aber nichts hat funktioniert. Außerdem ist mein Problem nicht grau, es ist weiß wie Schnee!
Was könnte der Grund dafür sein?
ios
objective-c
ipad
uitableview
uibackgroundcolor
Göktuğ Aral
quelle
quelle
Antworten:
Gute Nachricht: Laut Versionshinweisen für iOS 10:
Für Versionen <10:
Ich habe dies in iOS 8 (8.3) gesehen. Obwohl meine Zellen in IB "klare Farbe" und ihre Inhaltsansichten "klare Farbe" hatten, wurden sie als weiß dargestellt. Eine unvollständige, aber vernünftige Lösung, da immer noch Werte von IB übernommen werden:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { ... cell.backgroundColor = cell.contentView.backgroundColor; return cell; }
Es scheint, dass meine wiederverwendbaren Zellen in der Warteschlange ihren Hintergrund auf dem iPad weiß werden lassen. Ich konnte dies mithilfe des Debuggers für die Ansichtshierarchie feststellen.
Nachdem ich dies getan hatte, konnte ich die Hintergrundfarbe der Tabelle verwenden und musste keine Hintergrundansicht festlegen, obwohl dies auch funktioniert.
quelle
cell.contentView.backgroundColor = cell.backgroundColor
. Nachdem ich gedrucktcell.contentView.backgroundColor
und bemerkt hatte, dass esnil
vorher war, entfernte ich Ihren Vorschlag und änderte die Farbe der Inhaltsansicht im Storyboard, was auch funktionierte :)Sie können dies beheben, indem Sie in Ihrer appDelegate-Datei eine API-Einstellung für das Erscheinungsbild vornehmen:
Schnell:
UITableViewCell.appearance().backgroundColor = UIColor.clearColor()
quelle
[UITableViewCell appearance].backgroundColor = [UIColor clearColor];
Anstatt die Hintergrundfarbe festzulegen, versuchen Sie stattdessen, eine Hintergrundansicht zu verwenden:
- (void)viewDidLoad { self.tableView.backgroundView = [UIView new]; self.tableView.backgroundView.backgroundColor = [UIColor clearColor]; }
Ich hatte Probleme, bei denen die Verwendung von backgroundColor nicht immer einen Effekt erzeugt, sondern das Festlegen einer Hintergrundansicht einwandfrei funktioniert.
quelle
Aufbauend auf Ben Flynns Antwort ... Die Hintergrundfarbe von cell.contentView entspricht nicht unbedingt der Hintergrundfarbe von cell.contentView. In diesem Fall stellte ich fest, dass dies bei der Lösung des Problems mit dem weißen Hintergrund des iPad in mehreren Situationen hilfreich war:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { ... cell.backgroundColor = cell.backgroundColor; return cell; }
Während die Aussage lächerlich und verrückt aussieht ... löst sie das Problem.
quelle
Swift 5
Ich habe eine Tabellenansicht mit vielen verschiedenen Zellen, jede hat eine andere Farbe.
Die Antwort von @Ben Flynn
cell.backgroundColor = self.contentView.backgroundColor
kann das nicht erreichen. Der Grund istself.contentView.backgroundColor
Null, also haben Sie nur das klargestelltcell.backgroundColor = nil
.Grundsätzlich ist es der Fehler von Xcode (ich denke, ja, es ist scheiße!), Hat
cell.backgroundColor
immer noch Farbe, kann aber nicht angezeigt werden.Nach einer Weile des Debuggens, basierend auf der Antwort von @Ray W, ist hier meine Lösung.
class YourCustomCell: UICollectionViewCell { override func awakeFromNib() { super.awakeFromNib() backgroundColor = backgroundColor // Tricky to re-apply the background color } }
quelle
Dies löst dieses Problem für mich
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { tableView.backgroundColor = UIColor.clear }
quelle
Nach meiner Erfahrung haben einige Versionen von iOS die Hintergrundfarbe von UITableViewCell festgelegt, bevor die Delegierten aufgerufen wurden
tableView:willDisplayCell:forRowAtIndexPath:
. Das Zurücksetzen auf Ihre benutzerdefinierte Farbe in dieser Methode behebt das Problem.quelle
Swift 3.1
Ich habe diesen Fehler umgangen, indem ich ihn in meine
UITableViewCell
Unterklasse eingefügt habe:Wenn die Zelle aus der NIB-Datei geladen wird:
override func awakeFromNib() { super.awakeFromNib() self.backgroundColor = UIColor.clear }
und wenn die Zelle vom System wiederverwendet wird
override func prepareForReuse() { super.prepareForReuse() self.backgroundColor = UIColor.clear }
iOS 10 soll dieses Problem in Interface Builder beheben, wie animeshporwal sagte.
quelle
SWIFT 3.XX.
Stellen Sie dies
UITableViewCell.appearance().backgroundColor = UIColor.clear
Im
AppDelegate
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
quelle
Ich verwende
Storyboard
mitUITableViewControlrs
, daher war die einfachste Entscheidung, alle Controller in Unterklassen zu unterteilen und diese Methode dem übergeordneten Controller hinzuzufügen- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{ if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad){ cell.backgroundColor = [UIColor clearColor]; } }
quelle
SCHNELL
Das passierte mir auch. Meine Tabellenansicht in meinem SWRevealViewController erschien auf meinem iPad weiß, als sie auf meinem iPhone klar aussah (so wollte ich es mit einem Hintergrundbild). Ich habe alles oben Genannte ausprobiert, aber dies hat in meinem viewDidLoad () für mich funktioniert.
tableView.backgroundView = UIImageView(image: UIImage(named: "gray")) tableView.backgroundView?.backgroundColor = .clearColor() UITableViewCell.appearance().backgroundColor = .clearColor()
quelle
Dies kann in einem Storyboard wie folgt erreicht werden:
Ergebnis: Die Ansichten des iPad- und iPhone-Simulators sehen gleich aus
quelle
Ich hatte gerade dieses Problem und habe es behoben, indem ich die Hintergrundfarbe der Ansicht geändert habe (im Gegensatz zu der der tableView). Scheint auf dem iPad, das ist das, was zuerst verwendet wird und in meinem Fall wurde es auf Weiß gesetzt.
quelle
SCHNELL Ich hatte auch dieses Problem. Funktioniert gut auf .phone, aber tableViewCells werden auf .pad weiß. Ich dachte, ich würde zeigen, wie ich es mit Swift behoben habe.
Verbinden Sie die tableViewCell mit der viewController.swift als @IBOutlet wie folgt:
@IBOutlet weak var tvc1: UITableViewCell! @IBOutlet weak var tvc2: UITableViewCell! @IBOutlet weak var tvc3: UITableViewCell!
Fügen Sie dann in viewDidLoad Folgendes ein:
Sehr seltsam, ich weiß nicht, was hier passiert, aber das hat es für mich gelöst.
quelle
Dies scheint mit iOS 10 Beta 4 behoben zu sein, wie in den Versionshinweisen unter
UIKit
Anmerkungen erwähnt:quelle
Ich habe eine transparente Tabellenansicht mit halbtransparenten Tabellenansichtszellen. Ich habe die Hintergrundfarbe der Tabellenansicht so eingestellt, dass sie beim Erstellen der Tabelle gelöscht wird. Dies funktioniert für alle iOS / Geräte-Kombinationen mit Ausnahme von iPad + iOS 8, bei denen die Hintergrundfarbe weiß bleibt.
Für mich funktioniert es, die Hintergrundfarbe der Zelle auf halbtransparent und die Hintergrundfarbe der Inhaltsansicht auf klar zu setzen, da ich dies bei jedem mache
tableView(_ tableView: UITableView, cellForRowAt indexPath)
. Das Problem für mich war nur, dass der Hintergrund der Tabellenansicht weiß blieb.Ich habe alle Kombinationen ausprobiert, die ich in Bezug auf dieses Problem gefunden habe, aber das einzige, was ich tatsächlich tun musste, war, den Hintergrund der Tabellenansichten für jede auf transparent zu setzen
tableView(_ tableView: UITableView, cellForRowAt indexPath)
. Nicht sehr intuitiv, aber es funktioniert zumindest. : P.quelle