Ich habe eine UITableView mit Zellen erstellt, die sich erweitern, wenn Sie darauf tippen. Es ist dem folgenden Projekt nachempfunden: https://github.com/rushisangani/TableViewCellExpandWie funktioniert das Ändern der intrinsicContentSize einer UITableViewCell?
Im Grunde hat die Containeransicht der Zelle zwei Unteransichten, die als Container für die erweiterten/zusammengezogenen Zustände "Front" und "Back" dienen, die jeweils nach oben beschränkt sind. unteren, vorderen und hinteren Kanten der Hauptinhaltsansicht der Zelle. Um die Zelle zu erweitern oder zu kontrahieren, schalte ich einfach die Eigenschaft isActive auf die untere Integritätsbedingung der Vorder- und Rückseite um. Das funktioniert, aber nur wenn ich die Zelle neu lade, wenn sie angezapft wird. Wenn ich nur die Einschränkungen ändere und dann versuche, invalidateIntrinsicContentSize() aufzurufen, passiert nichts.
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
// Expand/contract the cell and invalidate size (doesn't work)
// let cell = tableView.cellForRow(at: indexPath) as! ExpandingCell
// cell.tap()
// cell.invalidateIntrinsicContentSize()
// Keep track of the selected index and configure the expand/contract state when the cell is remade
tableView.deselectRow(at: indexPath, animated: false)
expandedIndexPath = indexPath
if(!expandedIndexPathArray.contains(indexPath)){
expandedIndexPathArray.append(indexPath)
}
else{
expandedIndexPathArray = expandedIndexPathArray.filter({$0 != indexPath})
}
// Whenever a cell's intrinsicContentSize changes, it must be reloaded
tableView.reloadRows(at: [indexPath], with: .none)
}
Was passiert hinter den Kulissen? Warum kann die Zelle ihre Größe nicht neu berechnen, ohne erneut geladen zu werden?
Süß, Ich mag, dass viel besser als die Zelle neu zu laden. Warum funktioniert beginUpdates()/endUpdates(), aber nicht invalidateIntrinsicContentSize()? – GoldenJoe
Die tatsächliche Inhaltsgröße wurde mit Auto Layout in iOS 6 eingeführt. Die Tabellenansichtsklasse ist älter als diese. Es verschiebt auch Änderungen mit eigenen Animationen usw. –
Gibt es irgendeine anständige Dokumentation darüber, wie der Prozess der Größenanpassung einer Zelle mit automatischem Layout funktioniert? Ich weiß, wie man Zellen mit automatischem Layout macht und Dinge zum Laufen bringt, aber es wäre schön, die dahinterliegenden Mechanismen zu verstehen. Apples Dokumentation ist in gewisser Weise ziemlich beschissen. – GoldenJoe