UITableView klarer Hintergrund

90

Mir ist klar, dass iOS 7 nicht offiziell veröffentlicht wurde und wir nicht darüber diskutieren sollten, ABER ich werde verrückt, wenn ich versuche, dieses Problem herauszufinden. Unter iOS 6 war meine Tabellenansicht transparent und sah großartig aus. Zum ersten Mal wird iOS 7 ausgeführt, und der Hintergrund ist weiß.

Ich habe versucht, die Tabelle backgroundColor, Zellenfarbe usw. usw. in UIColor clearColor zu ändern, habe aber keine Änderung vorgenommen.

Wie kann ich dieses Problem beheben?

Der Tisch

Teddy13
quelle
1
Sie haben versucht, den Tisch backgroundViewklar zu stellen?
Rückgängig machen
Könnten Sie den Code anzeigen, in dem Sie die Hintergrundfarbe einstellen? Was ist mit der übergeordneten Ansicht? Vielleicht ist der Hintergrund der Tabellenansicht klar, der übergeordnete jedoch nicht?
Sooper
Ich habe dasselbe bemerkt, aber als ich die gleiche App installiert habe, die vor meiner aktuellen Version auf iOS 7.0 lief, passierte das nicht. Liegt dieses Problem dann in xCode5.0?
Totumus Maximus

Antworten:

123
    // Fix for iOS 7 to clear backgroundColor
    cell.backgroundColor = [UIColor clearColor];
    cell.backgroundView = [[UIView new] autorelease];
    cell.selectedBackgroundView = [[UIView new] autorelease];

in cellForRowAtIndexPath

Stellen Sie außerdem sicher, dass Ihre Tabellenansicht tatsächlich einen transparenten Hintergrund hat (im Storyboard): Geben Sie hier die Bildbeschreibung ein

Slamor
quelle
George, füge diesen Code in die Methode ein - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath
IanStallings
1
In den Fällen, in denen Sie selectedBackgroundView wirklich benötigen, können Sie Folgendes in cellForRowAtIndexPath einfügen: cell.selectedBackgroundView = [[[UIImageView alloc] initWithImage: [UIImage imageNamed: @ "yourBgImage.png"]] autorelease]; oder sogar in awakeFromNib: self.selectedBackgroundView = ... Beachten Sie, dass: self.backgroundColor = [UIColor clearColor]; funktioniert nicht in awakeFromNib unter iOS7. Aber: cell.backgroundColor = [UIColor clearColor]; funktioniert ordnungsgemäß nur in cellForRowAtIndexPath für iOS 7.0
Slamor
11
Sie müssen nur die folgende Zeile hinzufügen: cell.backgroundColor = [UIColor clearColor];
Evya
Dies funktioniert wie charm cell.backgroundColor = [UIColor clearColor];
Bpolat
Wie geht das in Swift?
Qadir Hussain
58

Stell Dies:

cell.backgroundColor = [UIColor clearColor];

In diesem Abschnitt:

cellForRowAtIndexPath
Maximus Vermillion
quelle
1
In iOS 6 ist es ausreichend, die backgroundViewauf eine leere Ansicht zu setzen, aber dieser zusätzliche Code wird für iOS 7 benötigt.
Kevin Borders
25

Versuchen Sie zuerst, backgroundView auf Null zu setzen.

[self.tableView setBackgroundView:nil];
[self.tableView setBackgroundColor:[UIColor clearColor]];

Ich bin mir nicht sicher, ob dies eine Änderung in der Dokumentation mit iOS7 ist oder schon immer vorhanden war und die Hintergrundfarbe nicht beeinflusst hat, sondern gemäß UITableView Class Reference @property backgroundView

"Sie müssen diese Eigenschaft auf Null setzen, um die Hintergrundfarbe der Tabellenansicht festzulegen."

edit: korrigierte Codesyntax

Dandan
quelle
25

Dies wurde beantwortet, aber in vielerlei Hinsicht falsch.

Sie müssen die folgende Delegatenmethode implementieren:

    - (void)tableView:(UITableView *)tableView  willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    [cell setBackgroundColor:[UIColor clearColor]];
}

Sie können das Update nicht in cellForRowAtIndexPath einfügen, da dies nach dem Rendern der Zelle erfolgt und ein weißer Hintergrund blinkt, bevor der Hintergrund gelöscht wird (auf langsameren Geräten).

Verwenden Sie diese Delegate-Methode und Ihre Probleme sind gelöst!

schnappen
quelle
1
Ja. Für iOS 7 ist dies der Weg, um den Hintergrund zu löschen. Alle anderen oben genannten Vorschläge funktionieren möglicherweise nicht.
girish_vr
15

Tatsächlich unterscheidet sich der offiziell korrekte Ort zum Ändern der Hintergrundfarbe der Zelle gemäß der Dokumentation ( UITableViewCell-Klassenreferenz ):

Unabhängig davon, ob Sie eine vordefinierte oder eine benutzerdefinierte Zelle verwenden, können Sie den Hintergrund der Zelle mithilfe der Eigenschaft backgroundView oder durch Ändern der geerbten Eigenschaft backgroundColor ändern. In iOS 7 haben Zellen standardmäßig einen weißen Hintergrund. In früheren Versionen von iOS erben Zellen die Hintergrundfarbe der umschließenden Tabellenansicht. Wenn Sie die Hintergrundfarbe einer Zelle ändern möchten, tun Sie dies in der tableView: willDisplayCell: forRowAtIndexPath: -Methode Ihres Tabellenansichtsdelegierten.

asdusd
quelle
Ich versuche dies, aber die ersten gezeigten Zellen haben alle einen weißen Hintergrund. Wenn ich durch Scrollen neue Zellen erstelle, haben sie den gewünschten transparenten Hintergrund. Ich bin mir nicht sicher, was ich sonst noch versuchen soll ...
David Dunham
Egal, es scheint ein Zeitproblem zu sein. Ich habe Sachen in awakeFromNib gemacht, was zu früh war.
David Dunham
7

schnell 3, 4 und 5

cell.backgroundColor = UIColor.clear
Jamal alayq
quelle
6

Dies ist ein ziemlich frustrierendes Problem. Hier ist meine aktuelle Lösung:

Fügen Sie dies Ihrer UITableViewCellUnterklasse hinzu.

- (void)didMoveToSuperview {
    [super didMoveToSuperview];

    self.backgroundColor = [UIColor clearColor];
}
Berk
quelle
Oh Gott. Danke dir. Hat meine Nacht gerettet. Ihre Antwort sollte die akzeptierte gewesen sein.
Michal Shatz
5

Dies funktionierte bei mir in iOS7 +:

self.tableView.backgroundColor =[UIColor blueColor];
self.tableView.opaque = NO;
self.tableView.backgroundView = nil;`

und dann in cellForRowAtIndexPath:

cell.backgroundColor = [UIColor clearColor];
DevC
quelle
4

Versuchen Sie dieses Code-Snippet

cell.contentView.backgroundColor = [UIColor clearColor];
cell.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.5];
Marco Antonio Uzcategui Pescoz
quelle
4

Dies hat nur bei mir funktioniert, als ich für jede Zelle eine klare Hintergrundfarbe und für die Tabelle selbst eine klare Farbe bearbeitet habe. BEIDE PROGRAMMATISCH

So stellen Sie die klare Farbe für die Tabelle ein:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    initMenu()
    myTableView.backgroundColor = UIColor.clearColor()
}

So stellen Sie die Farbe für die Zellen ein:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("tablecellid", forIndexPath: indexPath)
    cell.backgroundColor = UIColor.clearColor()
    return cell
}
SoliQuiD
quelle
3

Eins zu schön. Die Standardfarbe von UITable scheint weiß zu sein (ich weiß nicht warum)

Hintergrund weiß

Aber ändern Sie das besser.

Paul Brewczynski
quelle
Perfekt! Das war der fehlende Frieden. Keine zusätzliche Codezeile erforderlich!
Morpheus78
3

Erstes Set

tableView.backgroundColor = [UIColor clearColor];

Zweiter Satz

tableCell.backgroundColor = [UIColor clearColor];
Fantasyczl
quelle
3

IB-Outlet für Tabellenansicht erstellen @IBOutlet schwach var yourTable: UITableView!

in Ansicht laden

override func viewDidLoad() {
    yourTable.delegate = self
    yourTable.dataSource = self

    yourTable.backgroundColor = UIColor.clearColor()
}

Wenn Sie die Farbe von Cell löschen möchten, tun Sie dies auch in

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    cell.backgroundColor = UIColor.clearColor() 

}
veenaay pawar
quelle
2

In meiner App musste ich das backgroundColorfür meine UITableViewCellKlasse auf [UIColor clearColor]Farbe setzen, als ich für aktualisiert habe iOS 7.

Arthur Dexter
quelle
2

Versuchen

[myTable setSeparatorStyle:UITableViewCellSeparatorStyleNone];
[myTable setSeparatorInset:UIEdgeInsetsZero];

Und

cell.backgroundColor = [UIColor clearColor];
Jorgy
quelle
2

In meinem Fall wurde die Zelle mit einem xib erstellt. Es scheint, als hätte der Interface Builder unter xcode5 Probleme, clearColor auf cell.backgroundColor zu setzen.

Alles was ich tun musste war tatsächlich zu setzen

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// get the cell from the nib
//then force the backgroundColor
cell.backgroundColor = [UIColor clearColor]
return cell;
}
Ben G.
quelle
Kontrolle erreicht Ende der nicht leeren Funktion
Ropo
2

Wählen Sie einfach Farbe im Hintergrund anzeigen für die Tabelle und auch für die Zelle aus.

Walter Barlet
quelle
2

schnell 3

override func viewDidLoad() {
        super.viewDidLoad()
        tableView.backgroundColor = UIColor.clear
}
MrMins
quelle
1
// Fix iOS 7 clear backgroundColor compatibility 
// I Think this two lines only are enough

cell.backgroundColor = [UIColor clearColor];
cell.selectedBackgroundView = [[UIView new] autorelease];
Kiran Jasvanee
quelle
0

einstellen

tableView.backgroundColor = [UIColor clearColor];

in viewDidLoad.

Wenn dies nicht funktioniert, versuchen Sie:

tableView.backgroundView = nil;
Lal Krishna
quelle
0

In schneller 3

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath)
    cell.backgroundColor = .clear
    cell.backgroundView = UIView()
    cell.selectedBackgroundView = UIView()
    return cell
}
Patricio Bravo
quelle