私は、iOSネイティブのリマインダーアプリと同様のアプリを構築しようとしています。ヘッダーとフッターのある項目のリストがある場所。各セルにはUITextView
が含まれており、ユーザーの入力時に動的にセルの高さが変更されます。フッタービューには同じセルビューが含まれていますが、フッターにしたいので、ボトムビューに固執します。セルは動的な高さに設定されています。UITableView reloadSectionsはviewForFooterInSectionをトリガーしませんか?
checklistTable.rowHeight = UITableViewAutomaticDimension
checklistTable.estimatedRowHeight = 60
checklistTable.sectionFooterHeight = UITableViewAutomaticDimension
checklistTable.estimatedSectionFooterHeight = 60
これは入力中にセルの高さを変更するロジックですが、これは通常のセルでは完全に機能しますが、フッタービューでは機能しません。私は viewForFooterInSectionにブレークポイントを設定しましたが、最初の読み込み後は呼び出されませんでした。
func textViewDidChange(_ textView: UITextView) {
let startHeight = textView.frame.size.height
let calcHeight = textView.sizeThatFits(textView.frame.size).height
if startHeight != calcHeight {
UIView.setAnimationsEnabled(false)
tableView?.beginUpdates()
if cellType == .footer {
tableView?.reloadSections(IndexSet(integer: 0), with: .automatic)
}
tableView?.endUpdates()
UIView.setAnimationsEnabled(true)
}
}
誰でも正しい方向を指摘できますか?おかげtableView?.beginUpdates()
を呼び出すUIView
&に&無効アニメーションを有効にする
と呼ばれたのですか? –
APIのドキュメントでは、このメソッドはヘッダーとフッターではなくセルを更新するとしか言いません。 – picciano
@niravはい、viewForFooterInSectionは呼び出しを初期化します。いつかスクロール中に –