Ich habe eine UITableView mit zwei Abschnitten. Es ist eine einfache Tabellenansicht. Ich verwende viewForHeaderInSection, um benutzerdefinierte Ansichten für diese Header zu erstellen. So weit, ist es gut.
Das Standard-Bildlaufverhalten besteht darin, dass bei Auftreten eines Abschnitts die Abschnittsüberschrift unter der Navigationsleiste verankert bleibt, bis der nächste Abschnitt in die Ansicht gescrollt wird.
Meine Frage lautet: Kann ich das Standardverhalten so ändern, dass die Abschnittsüberschriften NICHT oben verankert bleiben, sondern mit den restlichen Abschnittszeilen unter der Navigationsleiste scrollen?
Vermisse ich etwas Offensichtliches?
Vielen Dank.
ios
iphone
uitableview
cocoa-touch
Davidjhinson
quelle
quelle
Antworten:
Die Art und Weise, wie ich dieses Problem gelöst habe, besteht darin, das
contentOffset
entsprechend demcontentInset
inUITableViewControllerDelegate
(erweitertUIScrollViewDelegate
) wie folgt anzupassen :Das einzige Problem hierbei ist, dass es beim Zurückblättern nach oben etwas an Sprungkraft verliert.
{HINWEIS: Die "40" sollte die genaue Höhe IHRES Abschnitts 0-Headers sein. Wenn Sie eine Zahl verwenden, die größer als die Kopfhöhe Ihres Abschnitts 0 ist, werden Sie feststellen, dass das Fingergefühl beeinträchtigt ist (versuchen Sie es wie "1000" und Sie werden sehen, dass das Sprungverhalten oben etwas seltsam ist). Wenn die Zahl mit der Kopfhöhe Ihres Abschnitts 0 übereinstimmt, scheint das Fingergefühl entweder perfekt oder nahezu perfekt zu sein.}
quelle
Sie können auch einen Abschnitt mit null Zeilen oben hinzufügen und einfach die Fußzeile des vorherigen Abschnitts als Überschrift für den nächsten verwenden.
quelle
Wenn ich das tun würde, würde ich die Tatsache ausnutzen, dass UITableViews im Plain-Stil die klebrigen Überschriften haben und solche im Grouped-Stil nicht. Ich würde wahrscheinlich zumindest versuchen, eine benutzerdefinierte Tabellenzelle zu verwenden, um das Erscheinungsbild von einfachen Zellen in einer gruppierten Tabelle nachzuahmen.
Ich habe das noch nicht ausprobiert, daher funktioniert es möglicherweise nicht, aber das würde ich vorschlagen.
quelle
tableView.separatorColor = [UIColor clearColor];
diese Option, um eine einfache Tabellenansicht nachzuahmen.Ich weiß, dass es spät ist, aber ich habe die endgültige Lösung gefunden!
Wenn Sie 10 Abschnitte haben, lassen Sie die dataSource 20 zurückgeben. Verwenden Sie gerade Zahlen für Abschnittsüberschriften und ungerade Zahlen für Abschnittsinhalte. etwas wie das
Voilá! : D.
quelle
UITableView
die ich verwende, nicht gut funktioniert .Es gibt mehrere Dinge, die getan werden müssen, um dieses Problem auf nicht hackige Weise zu lösen:
UITableViewStyleGrouped
backgroundColor
auf ein[UIColor clearColor]
backgroundView
Zelle für jede Tabellenansicht auf eine leere Ansicht mitbackgroundColor [UIColor clearColor]
rowHeight
entsprechend ein oder überschreiben Sie sie,tableView:heightForRowAtIndexPath:
wenn einzelne Zeilen unterschiedliche Höhen haben.quelle
UITableViewStyleGrouped
die Tabellenzellen zusätzliche Ränder, die ihre Ausrichtung mit der Kopfzeile ändern. Dies ist ein Problem, wenn Sie tatsächlich eine mehrspaltige Tabelle darstellen und den Header verwenden möchten, um Spaltentitel anzuzeigen (und dann die einzelnen Tabelleneinträge an diesen Titeln ausrichten möchten).Quoted hier , eine schnelle Lösung des IB verwenden. Das gleiche kann programmatisch gemacht werden, wenn auch ganz einfach.
Einige Leute sagten, dass diese Lösung den ersten Header verbirgt, aber ich habe kein solches Problem bemerkt. Es hat perfekt für mich funktioniert und war bei weitem die einfachste Lösung, die ich bisher gesehen habe.
quelle
Ich war mit den hier beschriebenen Lösungen bisher nicht zufrieden und habe versucht, sie zu kombinieren. Das Ergebnis ist der folgende Code, der von @awulf und @cescofry inspiriert wurde. Es funktioniert bei mir, weil ich keinen echten Header für die Tabellenansicht habe. Wenn Sie bereits eine Kopfzeile für die Tabellenansicht haben, müssen Sie möglicherweise die Höhe anpassen.
quelle
Ändern Sie einfach den TableView-Stil:
UITableViewStyle-Dokumentation :
quelle
Wählen Sie im Attributinspektor Ihrer tableView im Storyboard den Stil "Gruppierte Tabellenansicht" aus.
quelle
Stellen Sie die HeaderView der Tabelle mit einer transparenten Ansicht mit derselben Höhe der Header in der Schnittansicht ein. Starten Sie auch die Tabellenansicht mit einem Frame in der Höhe.
quelle
Ich habe eine alternative Lösung gefunden. Verwenden Sie die erste Zelle jedes Abschnitts anstelle eines echten Header-Abschnitts. Diese Lösung erscheint nicht so sauber, funktioniert aber so gut. Sie können eine definierte Prototypzelle für Ihren Header-Abschnitt und in der Methode cellForRowAtIndexPath verwenden Fragen Sie nach der indexPath.row == 0, wenn true, verwenden Sie die Prototypzelle des Header-Abschnitts, andernfalls verwenden Sie Ihre Standard-Prototypzelle.
quelle
indexPath.row
& arbeiten möchtenindexPath.section
, stellen Sie sicher, dass Sie eine Höhe von0.0f
for zurückgeben,- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
damit Ihre Header unsichtbar sind.Ändern Sie Ihren TableView-Stil:
Gemäß Apple-Dokumentation für UITableView:
quelle
Nachdem der gruppierte Stil im Grunde genommen genauso aussieht wie der einfache Stil in iOS 7 (in Bezug auf Ebenheit und Hintergrund), bestand für uns die beste und einfachste (dh am wenigsten hackige) Lösung darin, den Stil der Tabellenansicht einfach in gruppiert zu ändern. Das Aufbocken mit contentInsets war immer ein Problem, wenn wir oben eine Scroll-Away-Navigationsleiste integriert haben. Bei einem gruppierten Tabellenansichtsstil sieht es genauso aus (mit unseren Zellen) und die Abschnittsüberschriften bleiben fest. Keine Scrolling-Verrücktheit.
quelle
Weisen Sie Ihrer tableView einen negativen Einschub zu. Wenn Sie 22px hohe Abschnittsüberschriften haben und nicht möchten, dass diese klebrig sind, fügen Sie direkt nach dem erneuten Laden von Daten Folgendes hinzu:
Funktioniert wie ein Zauber für mich. Funktioniert auch für Abschnittsfußzeilen. Weisen Sie stattdessen einfach den negativen Einschub unten zu.
quelle
Ich füge die Tabelle einer Bildlaufansicht hinzu und das scheint gut zu funktionieren.
quelle
Überprüfen Sie meine Antwort hier . Dies ist der einfachste Weg, um die nicht schwebenden Abschnittsüberschriften ohne Hacks zu implementieren.
quelle
Die Antwort von @ LocoMike passte am besten zu meiner tableView, brach jedoch auch bei der Verwendung von Fußzeilen. Dies ist also die korrigierte Lösung bei der Verwendung von Kopf- und Fußzeilen:
quelle
Schnelle Version von @awulf Antwort, die großartig funktioniert!
quelle
Ich habe gelernt, dass das Festlegen der tableHeaderView-Eigenschaft dies bewirkt, dh:
und das ist es.
quelle