###前提・実現したいこと
tableview内にtextviewが設置されたセルがあり、セル内のtextviewにテキスト入力され行が増えた際に、tableviewのcontentsサイズを元にtableviewの高さに設定したAutolayout制約の値を更新し、セルおよびtableviewの高さを可変にしようとしています。
下記のような挙動となる理由と解消方法をご教示ください。
###発生している問題・エラーメッセージ
textviewの行が増えて高さが変わった時、contentsizeが更新されtableviewの高さも更新されますが、さらにもう一文字入力するとtaxtviewの高さは当然変わらないままcontentsizeのみ大きくなっています。
例)textviewの横幅を5文字と仮定
1.下記のようになった時にtextviewの高さが変化→contentsize.hightが変化
textview
あいうえお
あ
2.さらにもう1文字追加するとtextviewの高さはそのままにcontentsize.hightだけがさらに高くなる。
textview
あいうえお
あい
また、textviewに1文字目を入力した時に、viewDidAppearが呼ばれた時点よりもcontentsize.hightが少し小さくなっています。
※contentsizeをコードにより明示的に変更している箇所はありません。
###該当のソースコード
swift
1 2@IBOutlet weak var tableview: UITableView! 3@IBOutlet weak var constraint_table_hight: NSLayoutConstraint! 4 5override func viewDidLoad() { 6 super.viewDidLoad() 7 8 //空のセルを表示させない 9 tableview.tableFooterView = UIView(frame: CGRect.zero) 10 11 //セルの高さを自動調節 12 self.tableview.rowHeight = UITableViewAutomaticDimension 13 14 //セルをスクロール禁止にする 15 self.tableview.isScrollEnabled = false 16 17 } 18override func viewDidAppear(_ animated: Bool) { 19 constraint_table_hight.constant = self.tableview.contentSize.height 20} 21 22// セルの行数 23func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 24 return 9 25} 26func textViewDidChange(_ textView: UITextView) { 27 self.tableview.beginUpdates() 28 self.tableview.endUpdates() 29 30 //高さの制約を更新 31 constraint_table_hight.constant = self.tableview.contentSize.height 32} 33 34func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat { 35 return UITableViewAutomaticDimension 36} 37func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat{ 38 return UITableViewAutomaticDimension 39} 40
###試したこと
上記の通りです。
###補足情報(言語/FW/ツール等のバージョンなど)
xcode Version 8.3.3
回答1件
あなたの回答
tips
プレビュー