687 Stimmen

IOS 8 UITableView Separator Einfügung 0 funktioniert nicht.

Ich habe eine App, in der der UITableView Separator-Einsatz auf benutzerdefinierte Werte - Rechts 0, Links 0 - festgelegt ist. Dies funktioniert perfekt in iOS 7.x, jedoch in iOS 8.0 sehe ich, dass der Separator-Einsatz standardmäßig auf 15 rechts gesetzt ist. Obwohl es in den xib-Dateien auf 0 eingestellt ist, wird es trotzdem falsch angezeigt.

Wie entferne ich die Ränder des UITableViewCell Separators?

12voto

ideawu Punkte 2189

Ich habe es zum Laufen gebracht, indem ich Folgendes gemacht habe:

tableView.separatorInset = UIEdgeInsetsZero;
tableView.layoutMargins = UIEdgeInsetsZero;
cell.layoutMargins = UIEdgeInsetsZero;

10voto

mkz Punkte 2302

Beispiel für Swift 3.0:

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    // Entfernen von Trenneinsetzungen
    if cell.responds(to: #selector(setter: UITableViewCell.separatorInset)) {
        cell.separatorInset = .zero
    }
    // Verhindern, dass die Zelle die Rand-Einstellungen der Tabelle erbt
    if cell.responds(to: #selector(setter: UIView.preservesSuperviewLayoutMargins)) {
        cell.preservesSuperviewLayoutMargins = false
    }
    // Setzen der Layout-Ränder der Zelle explizit
    if cell.responds(to: #selector(setter: UITableViewCell.layoutMargins)) {
        cell.layoutMargins = .zero
    }
}

10voto

Vijay V S Punkte 139

Was cdstamper vorgeschlagen hat, anstelle der Tabellenansicht zu verwenden, funktioniert für mich, wenn ich die folgenden Zeilen in der Methode layoutSubview der Zelle hinzufüge.

- (void)layoutSubviews 
{
    [super layoutSubviews];

    if ([self respondsToSelector:@selector(setSeparatorInset:)])
                [self setSeparatorInset:UIEdgeInsetsZero];

        if ([self respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)])
        {
            [self setPreservesSuperviewLayoutMargins:NO];;
        }

        if ([self respondsToSelector:@selector(setLayoutMargins:)]) 
        {
            [self setLayoutMargins:UIEdgeInsetsZero];
        }
}

10voto

Matjan Punkte 3400

Nach intensiver Untersuchung...

Hier ist der einzige Weg, um diese Dinge vollständig zu kontrollieren (den ich finden konnte)

Um sowohl Trennzeichenabstände als auch Layoutränder in jeder Zelle vollständig zu kontrollieren, tun Sie dies in der Methode willDisplayCell auf Ihrem UITableviewDelegate.

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    cell.layoutMargins = UIEdgeInsetsZero
    cell.contentView.layoutMargins = UIEdgeInsetsMake(0, 10, 0, 10)
    cell.separatorInset = UIEdgeInsetsMake(0, 0, 0, 0)
}

Das Zellenobjekt steuert das Trennzeichen und die contentView steuert alles andere. Wenn Ihre Trennzeichenabstände in einer unerwarteten Farbe erscheinen, sollte dies das Problem lösen:

cell.backgroundColor = cell.contentView.backgroundColor

9voto

apinho Punkte 2165

Für mich hat die einfache Zeile den Job erledigt

cell.layoutMargins = UIEdgeInsetsZero

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X