2017-03-02 1 views
1

私は、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 &に&無効アニメーションを有効にする

+0

と呼ばれたのですか? –

+0

APIのドキュメントでは、このメソッドはヘッダーとフッターではなくセルを更新するとしか言いません。 – picciano

+0

@niravはい、viewForFooterInSectionは呼び出しを初期化します。いつかスクロール中に –

答えて

2

は同時に曖昧を探します。
は単に、reloadSectionsが動作するはず呼び出す、よう:viewForFooterInSectionは今までに、当初

if startHeight != calcHeight { 

     if cellType == .footer { 
      tableView?.reloadSections(IndexSet(integer: 0), with: .automatic) 
     } 
    } 
+0

ありがとう@ystack。私はそれを試みましたが、それは違いはありません:( –

+0

woah簡単な 'table.reloadData – ystack

+0

reloadDataはおそらくフッターを再描画しますが、私は本当にテーブル全体をリロードすることなくセクションフッタを更新するエレガントな方法を探しています。また、リロードするとキーボードが消えてしまいます。 –

関連する問題