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


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


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

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


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!


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.


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


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];
}

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];

4

Versuchen Sie dieses Code-Snippet

cell.contentView.backgroundColor = [UIColor clearColor];
cell.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.5];

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
}

3

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

Hintergrund weiß

Aber ändern Sie das besser.


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];

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() 

}

2

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


2

Versuchen

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

Und

cell.backgroundColor = [UIColor clearColor];

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;
}

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.


2

schnell 3

override func viewDidLoad() {
        super.viewDidLoad()
        tableView.backgroundColor = UIColor.clear
}

1
// Fix iOS 7 clear backgroundColor compatibility 
// I Think this two lines only are enough

cell.backgroundColor = [UIColor clearColor];
cell.selectedBackgroundView = [[UIView new] autorelease];

0

einstellen

tableView.backgroundColor = [UIColor clearColor];

in viewDidLoad.

Wenn dies nicht funktioniert, versuchen Sie:

tableView.backgroundView = nil;

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
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.