私が達成したいのは、セルは内部のラベルをクリックすると展開/折りたたむことができます。セルのサイズは、ユーザーがセルにスクロールバックするときに使用されていたサイズになるように記憶されている必要があります。すべてのビューに高さの制約が割り当てられた状態で、自動レイアウトを使用してセルをセットアップしました。ときにラベルをユーザーがクリックすると、私は、ラベルの高さ制約を変更することにより、セルの高さを変更:最後のセルを展開/折りたたんだ後の奇妙なUITableViewの動作
func triggerExpandCollapse(_ cell: UITableViewCell) {
guard let cell = cell as? ActivityTableViewCell, let indexPath = self.activitiesTableView.indexPath(for: cell) else { return }
if !self.expandedCellIndex.insert(indexPath.row).inserted {
self.expandedCellIndex.remove(indexPath.row)
cell.descLabelHeightConstraint.constant = 60
}
else {
cell.descLabelHeightConstraint.constant = cell.descLabel.intrinsicContentSize.height
}
self.activitiesTableView.beginUpdates()
self.activitiesTableView.endUpdates()
}
そしてまた、すべてのセルを返す前に、セルの高さを設定:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: Constants.TableViewCellID.activity, for: indexPath)
guard let activityCell = cell as? ActivityTableViewCell else {
return cell
}
activityCell.delegate = self
if self.expandedCellIndex.contains(indexPath.row) {
activityCell.descLabelHeightConstraint.constant = activityCell.descLabel.intrinsicContentSize.height
}
else {
activityCell.descLabelHeightConstraint.constant = 60
}
activityCell.layoutIfNeeded()
return activityCell
}
私も自動レイアウトを有効にしますby:
self.activitiesTableView.rowHeight = UITableViewAutomaticDimension
self.activitiesTableView.estimatedRowHeight = 1000
これまでのところ、セルは最後のものを除いて通常のスクロール動作で拡大/縮小することができます。最後のものを展開して上にスクロールすると、activitiesTableView
は短い距離を飛び越えて見えます。詳細は、video
ここでどのようにデバッグするのか分かりません。誰もそれについていくつかのアイデアを持っていますか?ありがとう。