So erstellen Sie eine UITableViewCell mit transparentem Hintergrund


73

Ich versuche, die Hintergrundfarbe von a UITableViewCellauf transparent zu setzen. Aber nichts scheint zu funktionieren. Ich habe einige Bilder / Schaltflächen im Inneren tableViewCellund möchte den weißen grouptableviewHintergrund verschwinden lassen, um einen "schwebenden" Effekt für die Bilder und Schaltflächen zu erzielen (als wären sie nicht im Inneren tableview).

Irgendeine Idee, wie dies erreicht werden könnte?

Antworten:


123

Wenn beide anderen Optionen nicht funktionierten, versuchen Sie dies

UIView *backView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
backView.backgroundColor = [UIColor clearColor];
cell.backgroundView = backView;

14
myTable.backgroundColor = [UIColor clearColor]; hat für mich gearbeitet! Danke
sjobe

7
Dies funktionierte auch für mich, obwohl ich zusätzlich Folgendes verwenden musste: cell.backgroundColor = [UIColor clearColor];
Mirko Froehlich

4
Ich musste auch cell.textLabel.backgroundColor = [UIColor clearColor] verwenden!
Casebash

Hinweis: Diese Methode funktioniert, wenn Sie auch die GRENZE um eine Zelle im UITableViewStyleGrouped-Stil entfernen möchten. (Dieser Kommentar soll Google helfen, diese Antwort zu finden, wenn Sie nach UITableViewStyleGrouped und klar suchen.)
Paul Cezanne

1
Sie müssen die Hintergrundansicht nicht erstellen. Es ist standardmäßig dort. cell.backgroundView.background = [UIColor clearColor] reicht aus. Sie können auch self.backgroundColor = [UIColor clearColor] ausführen. , aber dies kann in Interface Builder
Moose

43

Dies wird tatsächlich in den Dokumenten von UITableViewCell beantwortet. Während Sie also Transparenz für Ihre Steuerelemente einrichten müssen , muss die tatsächliche Hintergrundfarbe der Zelle wie folgt eingestellt werden.

"Hinweis: Wenn Sie die Hintergrundfarbe einer Zelle ändern möchten (indem Sie die Hintergrundfarbe einer Zelle über die von UIView deklarierte backgroundColor-Eigenschaft festlegen), müssen Sie dies in der tableView: willDisplayCell: forRowAtIndexPath: -Methode des Delegaten und nicht in tun tableView: cellForRowAtIndexPath: der Datenquelle. Änderungen an den Hintergrundfarben von Zellen in einer Tabellenansicht im Gruppenstil wirken sich in iOS 3.0 anders aus als in früheren Versionen des Betriebssystems. Sie wirken sich jetzt auf den Bereich innerhalb des abgerundeten Rechtecks ​​aus des Gebiets außerhalb davon. "

https://developer.apple.com/documentation/uikit/uitableviewcell


Du hast mein Leben gerettet. Dies ist die einzige Lösung, die wirklich funktioniert.
Roberto Conte Rosito

1
Wenn es einen Oscar für Programmierer geben würde, würden Sie jetzt einen Oscar halten!
Sjakelien

30

Beginnen Sie mit diesen Artikeln, um die Hintergrundfarbe korrekt einzurichten:

http://howtomakeiphoneapps.com/2009/03/how-to-add-a-nice-background-image-to-your-grouped-table-view/

http://pessoal.org/blog/2009/02/25/customizing-the-background-border-colors-of-a-uitableview/

Versuchen Sie dann alle folgenden Zeilen:

[[cell contentView] setBackgroundColor:[UIColor clearColor]];
[[cell backgroundView] setBackgroundColor:[UIColor clearColor]];
[cell setBackgroundColor:[UIColor clearColor]];

In einer UITableViewCell ist mehr als nur eine Ansicht versteckt. Dies sollte alle auf Ihrem Weg klar machen.


funktioniert perfekt ... bis auf einen Tippfehler: setBbackgroundColor => setBackgroundColor
Michael Z

1
Die Hintergrundfarbe von cell.contentView schien für mich der eigentliche Schlüssel zu sein. (Nur unter
iOS7

Du bist toll. +100 wenn ich könnte
Katushai

27
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{

    cell.backgroundColor = [UIColor clearColor];
    cell.backgroundView.backgroundColor = [UIColor clearColor];
}

1
Wenn Ihre Tabellenansicht eine Hintergrundfarbe hat und Sie möchten, dass Ihre Zelle transparent ist, damit Sie die Hintergrundfarbe Ihrer Tabellenansicht sehen können, ist dies die richtige Lösung.
Sam Soffes

Wie ist das nicht die EINZIGE Antwort. Klappt wunderbar.
Zia

19

Ich habe eine einfache Lösung

Objective-c- Version:

cell.backgroundColor = [UIColor clearColor];

Schnelle Version:

cell.backgroundColor = UIColor.clearColor()

1
aber setzen Sie es immer in - (void) tableView: (UITableView *) tableView willDisplayCell: (UITableViewCell *) Zelle forRowAtIndexPath: (NSIndexPath *) indexPath
Sathe_Nagaraja

11

Standardmäßig ist der Hintergrund Ihrer UITableViewCell weiß. Dadurch myCell.backgroundColor = [UIColor clearColor];wird Ihre UITableViewCell transparent , aber Sie werden nicht das Gefühl , den Unterschied , weil die UITableView (die contener Ihrer UITableViewCell) auch haben einen weißen Hintergrund standardmäßig machen.

Wenn Sie Ihren UIView-Hintergrund sehen möchten, müssen Sie Ihre Zelle und Ihren Tabellenhintergrund transparent machen:

myTableView.backgroundColor = [UIColor clearColor];
myTableCell.backgroundColor = [UIColor clearColor];

Martin Magakian


2

Ich hatte ein Problem, bei dem mein benutzerdefiniertes Hintergrundbild der Tabellenansichtszelle mit einem White-Label-Hintergrund überlagert wurde. Ich habe alles versucht und schließlich den Hintergrund so eingestellt, dass die Farbe in viewWillAppear klar ist.

      - (void)viewWillAppear:(BOOL)animated
    {
[super viewWillAppear:animated];
    self.tableView.backgroundColor = [UIColor clearColor]; // if this is not here, cell background image is covered with a white rectangle :S
    }

und im rowForCellAtIndexPath habe ich das Hintergrundbild festgelegt:

 if(!cell) {
    cell = [[[UITableViewCell alloc] initWithFrame: ...
    UIImageView *cellBG = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"cellbg.jpg"]];
    [cell setBackgroundView:cellBG];
    [cellBG release];
}


0

Es gibt 3 Schritte:

  1. cell.contentView.backgroundColor = UIColor.clear
  2. Deaktivieren Sie das Kontrollkästchen "Undurchsichtig" für die Zellen der Tabellenansicht im Attributinspektor im Abschnitt "Zeichnung". Klicken Sie dazu im Storyboard auf den Zellenprototyp der Tabellenansicht und öffnen Sie den Attributinspektor. Scrollen Sie nach unten und Sie werden es finden.
  3. Wählen Sie Hintergrund als klare Farbe aus der Dropdown-Liste an derselben Stelle wie in Schritt 2.
  4. Führen Sie Ihre App aus

0

Lösung für Swift 5.1

let cell = tableView.dequeueReusableCell(withIdentifier: "cellIdentifier", for: indexPath)
cell.backgroundColor = UIColor.clear

-1

Hier ist meine Lösung in Swift 4.1:

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.backgroundView = UIImageView(image: "Image")
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    cell.backgroundColor = UIColor.clear
{
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.