Ich passe a an UITableView
. Ich möchte die Trennlinie in der letzten Zelle ausblenden ... kann ich das tun?
Ich weiß, dass ich das kann, tableView.separatorStyle = UITableViewCellStyle.None
aber das würde alle Zellen der tableView betreffen. Ich möchte, dass es nur meine letzte Zelle betrifft.
Antworten:
in
viewDidLoad
, fügen Sie diese Zeile:und in
cellForRowAtIndexPath
:für iOS niedrigere Versionen
für iOS 7 obere Versionen (einschließlich iOS 8)
quelle
[cell.contentView addSubview:line]
anstelle von[cell addSubview:line]
cellForRowAtIndexPath
. Denken Sie daran, dass Zellen wiederverwendet werden. Jedes Mal, wenn diese Zelle wiederverwendet wird, fügen Sie eine weitere Trennlinienansicht hinzu. Bei großen Listen kann dies die Bildlaufleistung beeinträchtigen. Und es ist einfach nicht der richtige Weg, es zu tun.Sie können den folgenden Code verwenden:
Swift:
oder :
für Standardmarge:
um das Trennzeichen von Ende zu Ende anzuzeigen
Ziel c:
quelle
UITableView
, während die akzeptierte Antwort dies tut.self.tableView.separatorColor = [UIColor clearColor];
behoben.cell.separatorInset = UIEdgeInsetsMake(0.f, 0.f, 0.f, cell.bounds.size.width-cell.layoutMargins.left);
Wenn ich den Wert cell.layoutMargins.left nicht subtrahiere, wird die Trennlinie vom linken Rand zum linken Rand gezogen (falls vorhanden).textLabel
Off-Screen.Um Hirens Antwort zu verfolgen .
in ViewDidLoad und der folgenden Zeile:
Wenn Sie XIBs oder Storyboards verwenden, ändern Sie " Trennzeichen " in " Keine ":
Und in CellForRowAtIndexPath fügen Sie Folgendes hinzu:
Hier ist ein Beispiel für das Ergebnis, bei dem ich eine Tabellenansicht mit dynamischen Zellen anzeige (aber nur eine einzige mit Inhalt). Das Ergebnis ist, dass nur dieser ein Trennzeichen hat und nicht alle "Dummy" -Tabellenansichten automatisch hinzugefügt werden, um den Bildschirm auszufüllen.
Hoffe das hilft.
BEARBEITEN: Für diejenigen, die die Kommentare nicht immer lesen, gibt es tatsächlich einen besseren Weg, dies mit ein paar Codezeilen zu tun:
quelle
Wenn Sie das Trennzeichen nicht selbst zeichnen möchten, verwenden Sie Folgendes:
Diese API ist jedoch nur ab iOS 7 verfügbar.
quelle
separatorInset
scheint sowohl den Zellinhalt als auch das Trennzeichencell.IndentationWidth = -10000;
separatorInset
, für oben, links und unten auf 0 und für rechts aufcell.separatorInset = UIEdgeInsetsMake(0, 0, 0, cell.bounds.size.width);
die Zellenbreite zu setzen : Dadurch müssen keine anderen Zelleigenschaften angepasst werden.Meine Entwicklungsumgebung ist
Die obigen Antworten funktionieren bei mir nicht vollständig
Nach dem Versuch ist meine endlich funktionierende Lösung:
und der Effekt ist:
quelle
Setze
separatorInset.right = .greatestFiniteMagnitude
auf dein Handy.quelle
awakeFromNib
kann der gesamte Bildschirm blinken aufapplicationDidBecomeActive
In Swift 3, Swift 4 und Swift 5 können Sie eine Erweiterung für UITableViewCell wie folgt schreiben:
Dann können Sie dies wie folgt verwenden (wenn cell Ihre Zelleninstanz ist):
Es ist wirklich besser, die Breite der Tabellenansichtszelle als linken Einschub zuzuweisen, als ihr eine Zufallszahl zuzuweisen. Denn in einigen Bildschirmabmessungen sind Ihre Trennzeichen möglicherweise nicht jetzt, aber in Zukunft noch sichtbar, da diese Zufallszahl möglicherweise nicht ausreicht. Außerdem können Sie im iPad im Querformat nicht garantieren, dass Ihre Trennzeichen immer unsichtbar sind.
quelle
Bessere Lösung für iOS 7 & 8
Wenn Ihre App drehbar ist, verwenden Sie 3000.0f für die Konstante des linken Einschubs oder berechnen Sie sie im laufenden Betrieb. Wenn Sie versuchen, den rechten Einschub festzulegen, sehen Sie unter iOS 8 einen sichtbaren Teil des Trennzeichens auf der linken Seite der Zelle.
quelle
In iOS 7 sieht das gruppierte Zellentrennzeichen im UITableView-Stil etwas anders aus. Es sieht ein bisschen so aus:
Ich habe versucht, Kemenarans Antwort darauf zu geben:
Das scheint jedoch bei mir nicht zu funktionieren. Ich bin mir nicht sicher warum. Also entschied ich mich, Hirens Antwort zu verwenden , aber
UIView
anstelle vonUIImageView
und zeichnete die Linie im iOS 7-Stil:Wenn Sie dies verwenden, stellen Sie sicher, dass Sie in der zweiten if-Anweisung die richtige Höhe der Tabellenansicht eingeben. Ich hoffe das ist nützlich für jemanden.
quelle
Überschreiben Sie in Ihrer UITableViewCell-Unterklasse layoutSubviews und blenden Sie die _UITableViewCellSeparatorView aus. Funktioniert unter iOS 10.
quelle
Ich glaube nicht, dass dieser Ansatz unter keinen Umständen mit dynamischen Zellen funktioniert ...
Es spielt keine Rolle, in welcher Tableview-Methode Sie dies für dynamische Zellen tun. In der Zelle, in der Sie die Inset-Eigenschaft geändert haben, wird die Inset-Eigenschaft jetzt jedes Mal festgelegt, wenn sie aus der Warteschlange entfernt wird, was zu einem Amoklauf fehlender Zeilentrennzeichen führt ändere es selbst.
So etwas hat bei mir funktioniert:
Auf diese Weise aktualisieren Sie Ihren Datenstrukturstatus bei jeder Last
quelle
In Swift mit iOS 8.4 :
Hinweis: Dieses obige Snippet funktioniert in UITableView mit dynamischen Zellen. Das einzige Problem, auf das Sie stoßen können, besteht darin, dass Sie statische Zellen mit Kategorien, einem anderen Trennertyp als keinem und einem gruppierten Stil für die Tabellenansicht verwenden. In diesem speziellen Fall wird die letzte Zelle jeder Kategorie nicht ausgeblendet. Um dies zu überwinden, bestand die Lösung darin, das Zellentrennzeichen (über IB) auf "Keine" zu setzen und dann manuell (durch Code) Ihre Zeilenansicht zu jeder Zelle zu erstellen und hinzuzufügen. Ein Beispiel finden Sie im folgenden Snippet:
quelle
Verwenden Sie diese Unterklasse, Set
separatorInset
funktioniert nicht für iOS 9.2.1, Inhalte würden komprimiert.https://gist.github.com/liruqi/9a5add4669e8d9cd3ee9
quelle
Das viel einfachere und logischere ist, dies zu tun:
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { return [[UIView alloc] initWithFrame:CGRectZero]; }
In den meisten Fällen möchten Sie nicht nur das letzte tableCiewCell-Trennzeichen sehen. Bei diesem Ansatz wird nur das letzte tableViewCell-Trennzeichen entfernt, und Sie müssen nicht an Autolayout-Probleme (z. B. rotierende Geräte) oder Hardcode-Werte denken, um Trennzeicheneinfügungen einzurichten.
quelle
In
willdisplaycell
:quelle
Mit Swift 3 und der schnellsten Hacking-Methode können Sie Code mithilfe von Erweiterungen verbessern :
Wenn Sie dann die Zelle konfigurieren:
quelle
quelle
Der beste Weg , dies zu erreichen , ist Standard Zeilenseparatoren auszuschalten, Unterklasse
UITableViewCell
und eine eigene Linie Separator als Subview des AddcontentView
- siehe unten eine benutzerdefinierte Zelle , die verwendet wird , ein Objekt vom Typ darzustellen ,SNStock
die zwei String - Eigenschaften hat,ticker
undname
:Um das Standard-Zeilentrennzeichen zu deaktivieren, verwenden Sie ,
tableView.separatorStyle = UITableViewCellSeparatorStyle.None;
. Die Verbraucherseite ist relativ einfach, siehe Beispiel unten:quelle
Für Swift 2:
Fügen Sie die folgende Zeile hinzu
viewDidLoad()
:quelle
Wenn die akzeptierte Antwort nicht funktioniert, können Sie Folgendes versuchen:
Es ist toll ;)
quelle
Versuchen Sie den folgenden Code, um Ihr Problem zu lösen
quelle
quelle
Sie müssen eine benutzerdefinierte Zelle nehmen und Beschriftung hinzufügen und Einschränkungen festlegen, z. B. Beschriftung sollte den gesamten Zellenbereich abdecken. und schreiben Sie die folgende Zeile in den Konstruktor.
Stellen Sie außerdem den UITableView-Layoutrand wie folgt ein
quelle
Ich konnte das Trennzeichen in einer bestimmten Zelle nur mit der folgenden Problemumgehung ausblenden
quelle
Für iOS7 und höher besteht die sauberere Methode darin, INFINITY anstelle eines fest codierten Werts zu verwenden. Sie müssen sich keine Gedanken über die Aktualisierung der Zelle machen, wenn sich der Bildschirm dreht.
quelle
Wie (viele) andere bereits betont haben, können Sie alle UITableViewCell-Trennzeichen einfach ausblenden, indem Sie sie einfach für die gesamte UITableView selbst deaktivieren. zB in Ihrem UITableViewController
Leider ist es eine echte PITA, die pro Zelle durchgeführt werden muss, was Sie wirklich fragen.
Persönlich habe ich zahlreiche Permutationen versucht, das zu ändern
cell.separatorInset.left
, wie (viele) andere vorgeschlagen haben, aber das Problem ist, Apple zu zitieren (Hervorhebung hinzugefügt):" ... Mit dieser Eigenschaft können Sie Platz zwischen dem Inhalt der aktuellen Zelle und dem linken und rechten Rand der Tabelle hinzufügen . Positive Einfügungswerte verschieben den Zelleninhalt und das Zellentrennzeichen nach innen und von den Tabellenkanten weg ... "
Wenn Sie also versuchen, das Trennzeichen zu "verbergen", indem Sie es außerhalb des Bildschirms nach rechts schieben, können Sie am Ende auch die Inhaltsansicht Ihrer Zelle einrücken. Wie von Crifan vorgeschlagen, können Sie dann versuchen, diesen bösen Nebeneffekt zu kompensieren, indem Sie alles einstellen
cell.indentationWidth
undcell.indentationLevel
entsprechend zurückschieben, aber ich habe festgestellt, dass dies auch unzuverlässig ist (Inhalte werden immer noch eingerückt ...).Der zuverlässigste Weg, den ich gefunden habe, besteht darin,
layoutSubviews
eine einfache UITableViewCell-Unterklasse zu überschreiben und den rechten Einschub so einzustellen , dass er auf den linken Einschub trifft, sodass das Trennzeichen eine Breite von 0 hat und somit unsichtbar ist [dies muss in layoutSubviews automatisch erfolgen Griffdrehungen]. Ich füge meiner Unterklasse auch eine praktische Methode hinzu, um dies zu aktivieren.Vorsichtsmaßnahme: Es gibt keine zuverlässige Möglichkeit, den ursprünglichen rechten Einschub wiederherzustellen. Daher können Sie das Trennzeichen nicht "ausblenden", weshalb ich eine irreversible
hideSeparator
Methode verwende (im Gegensatz zum Freilegen von TrennzeichenIsHidden). Beachten Sie, dass das separatorInset über wiederverwendete Zellen hinweg bestehen bleibt. Da Sie das Ausblenden nicht aufheben können, müssen Sie diese versteckten Trennzeichenzellen in ihrem eigenen reuseIdentifier isoliert halten.quelle
Meine Anforderung war, das Trennzeichen zwischen der 4. und 5. Zelle zu verstecken. Ich habe es erreicht durch
quelle
Schnell:
Ziel c:
quelle
Innerhalb der Tabellenansichtszellenklasse. Setzen Sie diese Codezeile
quelle
Unter iOS9 hatte ich das Problem, dass das Ändern der Trennzeicheneinfügungen auch die Positionierung des Text- und Detaillabels beeinflusst.
Ich habe es damit gelöst
quelle