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?

levi
quelle

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;
Ron Srebro
quelle
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

logancautrell
quelle
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.

Corey Floyd
quelle
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];
}
iomar
quelle
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()
Muhammad Aamir Ali
quelle
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

Martin Magakian
quelle
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];
}
texmex5
quelle
2

Wenn Sie Storyboards verwenden, deaktivieren Sie "Opaque" für Ihren Prototyp UITableViewCells

Adrian Harris Crowne
quelle
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
Ehtesham Siddiquie
quelle
0

Lösung für Swift 5.1

let cell = tableView.dequeueReusableCell(withIdentifier: "cellIdentifier", for: indexPath)
cell.backgroundColor = UIColor.clear
Wir s
quelle
-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
{
Erik Olson
quelle