iOS führt die layoutMargins-Eigenschaft in Zellen und Tabellenansichten ein.
Diese Eigenschaft ist in iOS 7.0 nicht verfügbar, daher müssen Sie sicherstellen, dass Sie überprüfen, bevor Sie sie zuweisen!
Apple hat jedoch eine Eigenschaft namens preservesSuperviewLayoutMargins zu Ihrer Zelle hinzugefügt, die verhindert, dass sie die Randeinstellungen Ihrer Tabellenansicht erbt. Auf diese Weise können Ihre Zellen ihre eigenen Ränder unabhängig von der Tabellenansicht konfigurieren. Denken Sie an eine Überschreibung.
Diese Eigenschaft heißt preservesSuperviewLayoutMargins und indem Sie diese auf NEIN setzen, können Sie die layoutMargin-Einstellungen Ihrer Tabellenansicht mit den Einstellungen Ihrer eigenen Zelle überschreiben. Es spart Zeit (Sie müssen die Einstellungen der Tabellenansicht nicht ändern) und ist präziser. Bitte lesen Sie die Antwort von Mike Abdullah für eine detaillierte Erklärung.
HINWEIS: Dies ist die ordnungsgemäße und weniger unordentliche Implementierung, wie in der Antwort von Mike Abdullah beschrieben; wenn Sie preservesSuperviewLayoutMargins=NO für Ihre Zelle einstellen, wird sichergestellt, dass Ihre Tabellenansicht die Zelleinstellungen nicht überschreibt.
Erster Schritt - Konfigurieren Sie Ihre Zellenränder:
/*
Informiert den Delegaten, dass die Tabelle eine Zelle für eine bestimmte Zeile zeichnet.
*/
override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell,
forRowAtIndexPath indexPath: NSIndexPath)
{
// Separator-Einfügung entfernen
if cell.respondsToSelector("setSeparatorInset:") {
cell.separatorInset = UIEdgeInsetsZero
}
// Verhindern, dass die Zelle die Randeinstellungen der Tabellenansicht übernimmt
if cell.respondsToSelector("setPreservesSuperviewLayoutMargins:") {
cell.preservesSuperviewLayoutMargins = false
}
// Legen Sie ausdrücklich die Layoutränder Ihrer Zelle fest
if cell.respondsToSelector("setLayoutMargins:") {
cell.layoutMargins = UIEdgeInsetsZero
}
}
Das Einstellen der preservesSuperviewLayoutMargins-Eigenschaft auf NEIN für Ihre Zelle sollte verhindern, dass Ihre Tabellenansicht Ihre Zellenränder überschreibt. In einigen Fällen scheint es jedoch nicht richtig zu funktionieren.
Zweiter Schritt - Nur wenn alles scheitert, können Sie Ihre Tabellenansichtsränder notfalls erzwingen:
/*
Wird aufgerufen, um den ViewController zu benachrichtigen, dass seine Ansicht gerade seine Unteransichten angeordnet hat.
*/
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
// Erzwingen Sie Ihre Tabellenansichtsränder (dies könnte keine gute Idee sein)
if self.tableView.respondsToSelector("setSeparatorInset:") {
self.tableView.separatorInset = UIEdgeInsetsZero
}
if self.tableView.respondsToSelector("setLayoutMargins:") {
self.tableView.layoutMargins = UIEdgeInsetsZero
}
}
...und da haben Sie es! Dies sollte sowohl in iOS 8 als auch in 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 nicht ausgerichtete Zellen unterhalb der gerenderten Zellen haben, d.h. wenn die Tabelle mehr Zeilen hat als im Tabellenmodell definiert sind. Wenn der zweite Schritt nicht durchgeführt wird, würde dies zu unterschiedlichen Separator-Abständen führen.