2016-11-20 2 views
0

Ich habe Probleme, eine Zelle in cellForRowAtIndexPath in einer solchen Weise zu laden, dass ich einen benutzerdefinierten Offset nur für eine Zelle geben kann - in meinem Fall nur für Zelle 1, Abschnitt 1. Ich möchte einen benutzerdefinierten Offset geben Zelle, da dieselbe Zelle (xib) in anderen Teilen des Projekts verwendet wird, wo sie ohne Versatz zu den Rändern der Tabelle verläuft. Alle meine Zellen sind als * .xib-Dateien konzipiert. Ich bin bereit, etwas in awakeFromNib() oder andere Methoden zu setzen, wenn es die Notwendigkeit dafür gibt.Offset zu UITableViewCell zum Zeitpunkt der Erstellung hinzufügen?

enter image description here

Gibt es eine Möglichkeit, die Zelle zu setzen versetzt, einfügung, Ränder, Polsterung (nicht sicher über die korrekte Formulierung) zum Zeitpunkt der Erstellung oder zum Zeitpunkt der Belastung der Zelle?

Ich habe versucht, die Margen auf diese Weise festgelegt, aber es funktioniert nicht:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    if (indexPath.section == 0) && (indexPath.row) == 0 { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! MyCell 
     cell.layoutMargins = UIEdgeInsetsMake(10, 10, 10, 10) 
     return cell 
    } 
} else { 
    // Load other cells 
} 
+1

Es sieht so aus, als ob Sie eine Abschnittsüberschrift verwenden möchten. – shallowThought

+0

@ShallowThought Interessante Idee. Kannst du ein wenig erweitern? Ich habe die 'viewForHeaderInSection' implementiert, wo ich' MyCell() 'zurückgebe, was eine Unterklasse von' UITableViewCell' ist und es nicht funktioniert. Ich bekomme nur einen leeren Header. Irgendwelche Ideen, was könnte falsch sein? – Andrej

+0

Ihr Header muss eine Unterklasse von 'UITableViewHeaderFooterView' sein. Mehr Infos hier: https://developer.apple.com/reference/uikit/uitableviewheaderfooterview – Mark

Antwort

1

Ich glaube, Sie mit Ihrem cellForRowAtIndexPath Implementierung der Nähe sind. Versuchen Sie, die Ränder auf die contentView der Zelle anzuwenden (die Superview für den Inhalt Ihrer Zelle und eine Unteransicht der Zelle). Sie müssen möglicherweise auch die Hintergrundfarbe der Zelle auf clear setzen (die contentView wird weiterhin weiß sein).

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    if (indexPath.section == 0) && (indexPath.row) == 0 { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! MyCell 
     cell.contentView.layoutMargins = UIEdgeInsetsMake(10, 10, 10, 10) 
     return cell 
    } 
} else { 
    // Load other cells 
} 
+0

Danke @Mark Ich habe alle Kombinationen von 'cell.layoutMargins = UIEdgeInsetsMake (10, 10, 10, 10)', 'Zelle implementiert. contentView.layoutMargins = UIEdgeInsetsMake (10, 10, 10, 10) 'und auch' cell.backgroundColor = UIColor.clear', aber die Zelle wird immer noch bis zu den Kanten erweitert. Irgendwelche Ideen? – Andrej

+0

Die Tabellenansicht überschreibt möglicherweise Ihre 'LayoutMargins'. Wenn Sie 'layoutMargins' in' contentView' setzen, wird Ihr Inhalt eingefügt (wenn Sie ihn an den Rändern verankern), aber Ihr 'contentView' selbst wird sich nicht ändern. Du könntest eine subView zu deinem 'contentView' hinzufügen (um alle deine etiketten zu enthalten), dies an den Rändern von' contentView' verankern und die Hintergrundfarbe des 'contentView's löschen. Sie könnten dann die LayoutMargine von 'contentView' festlegen. – Mark

Verwandte Themen