Ich habe festgestellt, dass UITableViewCells in iOS 7 einen Zeilenumbruch im Trennzeichen der Zelle haben, den iOS 6 nicht hat. Gibt es eine Möglichkeit, diesen Zeilenumbruch loszuwerden? Wenn Sie das Trennzeichen in "Keine" ändern und dann UIViews mit der Farbe des Trennzeichens erstellen, wird das weiße Trennzeichen trotzdem angezeigt.
uitableview
ios7
Anthony Glyadchenko
quelle
quelle
layoutMargins
inviewDidLayoutSubviews
. Es funktioniert nicht, wenn Sie esviewDidLoad
oder ähnliches einstellen . Ich habe die Antwort so bearbeitet, dass dies klar ist.Sie können den ' Separator Inset ' auch über das Storyboard festlegen :
quelle
Wenn Sie ältere Versionen von iOS unterstützen möchten, sollten Sie die Verfügbarkeit dieser Methode überprüfen, bevor Sie sie aufrufen:
quelle
Herausgefunden.
quelle
Die ausgewählte Antwort hat bei mir nicht funktioniert. Aber das ja und es funktioniert ab ios 2.0:
quelle
Schnelle Version
iOS führt die Eigenschaft layoutMargins für Zellen- UND Tabellenansichten ein.
Diese Eigenschaft ist in iOS 7.0 nicht verfügbar, daher müssen Sie sie überprüfen, bevor Sie sie zuweisen!
Apple hat Ihrer Zelle jedoch eine ** -Eigenschaft hinzugefügt, die verhindert, dass die Randeinstellungen Ihrer Tabellenansicht übernommen werden. Auf diese Weise können Ihre Zellen unabhängig von der Tabellenansicht ihre eigenen Ränder konfigurieren. Betrachten Sie es als Überschreibung.
Diese Eigenschaft heißt preservesSuperviewLayoutMargins , und es NO Einstellung ermöglicht es Ihnen , Ihre Tabellenansicht der layoutMargin Einstellung mit Ihrer eigenen Zelle layoutMargin Einstellung außer Kraft zu setzen. Beides spart Zeit ( Sie müssen die Einstellungen der Tabellenansicht nicht ändern ) und ist präziser. Eine ausführliche Erklärung finden Sie in der Antwort von Mike Abdullah.
HINWEIS: Dies ist die richtige, weniger chaotische Implementierung, wie in der Antwort von Mike Abdullah ausgedrückt. Durch Festlegen der Vorbehalte Ihrer ZelleSuperviewLayoutMargins = NO wird sichergestellt, dass Ihre Tabellenansicht die Zelleneinstellungen nicht überschreibt.
Erster Schritt - Richten Sie Ihre Zellränder ein:
Wenn Sie die EigenschafterveSuperviewLayoutMargins für Ihre Zelle auf NO setzen, sollte verhindert werden, dass Ihre Tabellenansicht Ihre Zellenränder überschreibt. In einigen Fällen scheint es nicht richtig zu funktionieren.
Zweiter Schritt - Nur wenn alles fehlschlägt, können Sie Ihre Tabellenansichtsränder brutal erzwingen:
... und los geht's! Dies sollte sowohl unter iOS 8 als auch unter iOS 7 funktionieren.
Hinweis: Getestet mit iOS 8.1 und 7.1, in meinem Fall musste ich nur den ersten Schritt dieser Erklärung verwenden.
Der zweite Schritt ist nur erforderlich, wenn Sie eine nicht ausgefüllte Zelle unter den gerenderten Zellen haben, d. H. wenn die Tabelle größer als die Anzahl der Zeilen im Tabellenmodell ist. Wenn der zweite Schritt nicht ausgeführt wird, führt dies zu unterschiedlichen Trennzeichenversätzen.
quelle
Rufen Sie für eine dauerhafte Lösung in der gesamten Anwendung dies in der Anwendung auf: didFinishLaunching. Jede Tabellenansicht wird "repariert".
quelle
Und in iOS 8, basierend auf dem Beitrag von Seth McFarlane hier , müssen Sie sich mit layoutMargins befassen. Folgendes hat es für mich getan:
Führen Sie in ApplicationDidFinishLaunching Folgendes aus:
Erstellen Sie die folgende Kategorie in UITableView:
Rufen Sie in Ihren UITableViews kurz nach der Initialisierung auf
In Ihren UITableViewControllern benötigen Sie Folgendes:
quelle
In iOS 8 scheint es einen kleinen Fehler zu geben. Der benutzerdefinierte Wert für das Trennzeichen wird nicht auf die Zellen mit Text angewendet. Ich habe versucht, es über den Interface Builder und über Code einzustellen, aber beides hat nicht funktioniert. Ich habe auch einen Fehlerbericht eingereicht.
In der Zwischenzeit habe ich eine kleine Problemumgehung, um dies zu erreichen. Ich zeichne einfach die Linie auf der Zelle. Erstellen Sie eine Unterklasse von
UITableViewCell
und überschreiben Sie diedrawRect
Methode. Vergessen Sie auch nicht, die Separator-Eigenschaft vonUITableView
auf None zu setzen. Hier ist der Code. Es ist in Swift, aber da es im Grunde C ist, können Sie dasselbe auch in Objective-C verwenden.quelle
CGContextSetLineWidth(context, 1)
ist näher an der Standardeinstellung, falls jemand einen "Vanille" -Look möchteDas Zurücksetzen von separatorInset behebt dieses Problem für mich:
quelle
Die Lösung:
quelle
Beachten Sie, dass das Setzen des separatorInset von tableView auf UIEdgeInsetsZero gleichzeitig den linken Rand von Abschnittsüberschriften zu durchbrechen scheint! (Zumindest unter iOS 7.1)
Wenn Sie Abschnittsüberschriften mit tableView: titleForHeaderInSection: anzeigen möchten und dennoch den gewünschten Effekt erzielen möchten, dass zwischen UITableViewCells kein Zeilenumbruch auftritt, müssen Sie das separatorInset direkt in den Zellen anstelle von tableView festlegen!
quelle
Für iOS8 + hat das bei mir funktioniert,
und in
cellForRowAtIndexPath
Methode:quelle
Hinweis: Die Zeile setSeparatorStyle muss über dem Superaufruf liegen.
quelle
Für TableviewCell funktioniert Willams Antwort perfekt.
quelle
Für iOS8 und höher
Wenn Sie feststellen, dass nicht alle Lösungen wie ich funktionieren, haben Sie möglicherweise die Unterklasse von verwendet
UITableViewCell
und überschreiben dielayoutSubviews
Methode . Wenn Sie zwei der Bedingungen erfüllen, lesen Sie weiter.Mach oder überprüfe es Schritt für Schritt.
1, nach alloc und init
UITableView
, setzen Sie seinelayoutMargins
Eigenschaft.2 、
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
Legen Sie in der Methode nach dem Zuweisen und Initiieren Ihrer benutzerdefinierten EigenschaftUITableViewCell
dielayoutMargins
Eigenschaft fest.3 、 Der wichtigste Teil kommt ins
- (void)layoutSubviews
Spiel . Wenn Sie die Methode von UITableViewCell überschreiben, vergessen Sie nicht, sie als super zu bezeichnen .quelle
Xamarin.iOS Version
Ich habe das UITableView-Trennzeichen in Xamarin.iOS unter iOS 8.4 mit Hilfe von Beiträgen von Luis E. Prado und King-Wizard um die gesamte Breite erweitert . Ich musste sowohl SeparatorInset als auch LayoutMargins festlegen, damit es funktioniert. Ich habe keine Prüfungen für niedrigere iOS-Versionen geschrieben, da ich auf iOS 8 und höher abziele.
Ich habe die folgenden zwei C # -Erweiterungsmethoden geschrieben, um die volle Breite des UITableView-Trennzeichens auf UITableView- oder UITableViewCell-Ebene festzulegen. Je nach gewünschtem Effekt können Sie eine oder beide dieser Methoden verwenden (siehe Erläuterungen unten).
UITableView
Legen Sie die UITableView-Eigenschaften fest, um die Trennzeichen zu ändern, die nach leeren Zellen angezeigt werden. Diese SetLayoutMarginsZero-Methode kann über die ViewDidLoad-Methode des zugehörigen ViewController aufgerufen werden.
UITableViewCell
Legen Sie die UITableViewCell-Eigenschaften fest, um die Trennzeichen zu ändern, die nach aufgefüllten Zellen angezeigt werden. Diese SetLayoutMarginsZero-Methode kann über die TableViewSource GetCell-Methode aufgerufen werden.
quelle