Ich möchte sowohl den Hintergrund als auch die Rahmenfarbe einer UITableView im gruppierten Stil anpassen.
Ich konnte die Hintergrundfarbe folgendermaßen anpassen:
tableView.contentView.backgroundColor = [UIColor greenColor];
Aber die Randfarbe kann ich immer noch nicht ändern.
Wie passe ich diese beiden Aspekte der gruppierten Tabellenansicht an?
Antworten:
UPDATE: In iPhone OS 3.0 und höher gibt es
UITableViewCell
jetzt einebackgroundColor
Eigenschaft, die dies wirklich einfach macht (insbesondere in Kombination mit dem[UIColor colorWithPatternImage:]
Initialisierer). Aber ich werde die 2.0-Version der Antwort hier jedem überlassen, der sie braucht ...Es ist schwieriger als es eigentlich sein sollte. So habe ich das gemacht, als ich es machen musste:
Sie müssen die backgroundView-Eigenschaft von UITableViewCell auf eine benutzerdefinierte UIView festlegen, die den Rahmen und den Hintergrund selbst in den entsprechenden Farben zeichnet. Diese Ansicht muss in der Lage sein, die Ränder in 4 verschiedenen Modi zu zeichnen, die oben für die erste Zelle in einem Abschnitt abgerundet sind, unten für die letzte Zelle in einem Abschnitt abgerundet sind und keine abgerundeten Ecken für Zellen in der Mitte eines Abschnitts und an allen 4 Ecken für Abschnitte gerundet, die eine Zelle enthalten.
Leider konnte ich nicht herausfinden, wie dieser Modus automatisch eingestellt werden soll, daher musste ich ihn in der -cellForRowAtIndexPath-Methode der UITableViewDataSource festlegen.
Es ist eine echte PITA, aber ich habe mit Apple-Ingenieuren bestätigt, dass dies derzeit der einzige Weg ist.
Update Hier ist der Code für diese benutzerdefinierte BG-Ansicht. Es gibt einen Zeichnungsfehler, durch den die abgerundeten Ecken etwas lustig aussehen, aber wir sind zu einem anderen Design übergegangen und haben die benutzerdefinierten Hintergründe verschrottet, bevor ich die Möglichkeit hatte, sie zu beheben. Trotzdem wird dies wahrscheinlich sehr hilfreich für Sie sein:
quelle
Ich weiß, dass sich die Antworten auf das Ändern gruppierter Tabellenzellen beziehen, aber falls jemand auch die Hintergrundfarbe der Tabellenansicht ändern möchte:
Sie müssen nicht nur Folgendes einstellen:
Sie müssen auch die Hintergrundansicht ändern oder entfernen:
quelle
Zunächst einmal vielen Dank für diesen Code. Ich habe einige Zeichnungsänderungen in dieser Funktion vorgenommen, um das Eckproblem beim Zeichnen zu beseitigen.
quelle
Vielen Dank für den Code, es ist genau das, wonach ich gesucht habe. Ich habe auch den folgenden Code zu Vimals Code hinzugefügt, um den Fall einer CustomCellBackgroundViewPositionSingle-Zelle zu implementieren. (Alle vier Ecken sind abgerundet.)
quelle
Eine Sache, auf die ich mit dem obigen CustomCellBackgroundView-Code von Mike Akers gestoßen bin, die für andere nützlich sein könnte:
cell.backgroundView
wird nicht automatisch neu gezeichnet, wenn Zellen wiederverwendet werden, und Änderungen an der Position var der Hintergrundansicht wirken sich nicht auf wiederverwendete Zellen aus. Das bedeutet, dass lange Tabellen falsch gezeichnet wurdencell.backgroundViews
aufgrund ihrer Position .Um dies zu beheben, ohne jedes Mal, wenn eine Zeile angezeigt wird, eine neue Hintergrundansicht erstellen zu müssen, rufen Sie
[cell.backgroundView setNeedsDisplay]
am Ende von an-[UITableViewController tableView:cellForRowAtIndexPath:]
. Für eine wiederverwendbarere Lösung überschreiben Sie den Positionssetzer von CustomCellBackgroundView, um a einzuschließen[self setNeedsDisplay]
.quelle
Danke für diesen super hilfreichen Beitrag. Für den Fall, dass jemand da draußen (wie ich!) Nur einen völlig leeren Zellenhintergrund haben möchte, anstatt ihn durch Bilder / Text / andere Inhalte in IB anzupassen, und nicht herausfinden kann, wie zum Teufel der dumme Rand / die Polsterung / beseitigt werden soll. Hintergrund, obwohl Sie ihn in IB auf Clear gesetzt haben ... hier ist der Code, den ich verwendet habe, der den Trick gemacht hat!
Hoffentlich hilft das jemand anderem! Scheint wie ein Zauber zu wirken.
quelle
cell.backgroundView
.Vielen Dank an alle, die ihren Code gepostet haben. Das ist sehr nützlich.
Ich habe eine ähnliche Lösung abgeleitet, um die Hervorhebungsfarbe für gruppierte Tabellenansichtszellen zu ändern. Grundsätzlich die selectedBackgroundView der UITableViewCell (nicht die backgroundView). Was auch unter iPhone OS 3.0 diese PITA-Lösung noch benötigt, soweit ich das beurteilen kann ...
Der folgende Code enthält die Änderungen zum Rendern der Hervorhebung mit einem Farbverlauf anstelle einer Volltonfarbe. Auch das Rand-Rendering wird entfernt. Genießen.
quelle
Sie können die Rahmenfarbe durch Festlegen anpassen
quelle
So ändern Sie die Rahmenfarbe der Tabellenansicht:
In.h.:
In .m:
quelle
Diese Aufgabe kann einfach mit PrettyKit ausgeführt werden, indem etwa 5 Codezeilen hinzugefügt werden. Wenn Sie
nib
Dateien verwenden oderstoryboard
, vergessen Sie auch nicht, diesen kleinen Hack anzuwenden . Wenn Sie diesen Ansatz verwenden, sollten Sie Ihre Zelle unterteilen vonPrettyTableViewCell
:Dies ist ein Beispiel für meine
cellForRowAtIndexPath
:quelle
Ich hatte Probleme damit und habe viele Kombinationen von Dingen ausprobiert, als ich bemerkte, dass es für einige Zellen gut funktionierte, für andere jedoch nicht.
Seltsamerweise habe ich herausgefunden, dass es möglich ist, cell.backgroundColor auf lightGrayColor zu setzen, und alles funktioniert einwandfrei - aber blueColor hat mir Probleme bereitet, die Außenkanten nicht zu aktualisieren.
Es sei denn, es ist wirklich wichtig, grün zu verwenden - vielleicht möchten Sie dies versuchen. Es kann sein, dass dies eine Funktion ist, mit der Benutzer nur graue Farben verwenden können, wenn sie angeben, dass eine Zelle ausgewählt ist.
quelle