2017-09-08 3 views
1

Es gibt viele Fragen, die die dynamische Höhe für UITableViewCell von UITableView beantworten. Jedoch kann ich mein Problem nicht lösen.UITableViewAutomaticDimension funktioniert nicht mit benutzerdefinierten Tabellenzellen

Ich habe diese Tabellenzelle Erstellungscode:

class UINoteTabelViewCell: UITableViewCell { 
    override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 
     super.init(style: style, reuseIdentifier: reuseIdentifier) 
     self.selectionStyle = .none 
    } 

    func fill(_ note: Note) { 
     let view = UINote(withNote: note, atPoint: .zero) 
     self.contentView.addSubview(view) 
    } 
} 

Dies ist, wie ich Zelle für Tabellenansicht erstellen:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "NotePreview", for: indexPath as IndexPath) as! UINoteTabelViewCell 

     cell.fill(notes[indexPath.row] as! Note) 
     return cell 
    } 

Auch Tabellenansicht estimatedRowHeight und rowHeight sind Sätze zu UITableViewAutomaticDimension

Die Tabellenansicht zeichnet jedoch immer noch mit einer Höhe von 44,1 Zeilen.

Ich habe keine Ahnung, wie Sie es beheben.

PS kann ich nicht Satz estimatedRowHeight festgelegt, da jede Zelle dynamische Höhe haben

+2

'geschätztRowHeight' sollte nicht 'UITableViewAutomaticDimension' sein. Versuchen Sie, es auf '100' und die' rowHeight' auf UITableViewAutomaticDimension zu setzen. – TawaNicolas

+2

UITableViewAutomaticDimension arbeitet mit Constraints, Sie müssen geeignete Einschränkungen hinzufügen, nach denen die Zelle ihre Höhe berechnen kann – Abhishek

+0

Stellen Sie sicher, dass Ihre Labelnummer 0 Null ist – karthikeyan

Antwort

0

Automatische Höhe funktioniert bei berechneter Zelle contentView Höhe. Sie müssen daher Einschränkungen hinzufügen, die zur Berechnung der tatsächlichen Höhe verwendet werden.

Try this:

class UINoteTabelViewCell: UITableViewCell { 
    override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 
     super.init(style: style, reuseIdentifier: reuseIdentifier) 
     self.selectionStyle = .none 
    } 

    func fill(_ note: Note) { 
     let view = UINote(withNote: note, atPoint: .zero) 
     self.contentView.addSubview(view) 

     // this will make the difference to calculate it based on view's size: 
     view.translatesAutoresizingMaskIntoConstraints = false 
     view.leftAnchor.constraint(equalTo: contentView.leftAnchor).isActive = true 
     view.rightAnchor.constraint(equalTo: contentView.rightAnchor).isActive = true 
     view.topAnchor.constraint(equalTo: contentView.topAnchor).isActive = true 
     view.bottomAnchor.constraint(equalTo: contentView.bottomAnchor).isActive = true 
    } 
} 

Auch estimatedRowHeight sollte auf einen bestimmten Wert eingestellt werden, der etwa die Größe aller Zellen schätzt. Aber das wäre kein Problem.

+0

Endlich ist es Arbeit! Vielen Dank! –

0

ich sehen kann, den Sie hinzufügen, nur NoteView auf Zelle content. Sie sollten auch die automatische Layouteinschränkung für Ihre Notizansicht anwenden, z. B. "Leading", "Trailing", "Top" und "Bottom". Wenn Sie die korrekte automatische Layouteinschränkung für Ihre Notizansicht anwenden, hoffe, dass sie funktioniert.

0

sollten Sie der estimatedRowHeight einig Standardwert, sagen 60 Dann wird die Zeilen eine Standardhöhe von 60 haben, aber immer dann, wenn die Inhaltshöhe zu diesem Zeitpunkt mehr als 60 benötigt UITableViewAutomaticDimension funktionieren wird.

Verwandte Themen