Autolayout+UIScrollView上に動的なUITextViewを表示しようと思ったのですが、なかなか一筋縄ではいかなかったので備忘録
やりたいこと
StoryboardでAutolayoutを有効にしながらUI設定をしつつ、UITextViewの中身は動的に変化する前提で、大量のテキストを表示する際にはスクロールするようにしたい。
Storyboardではあくまで静的情報をもとに制約を定義するため、サーバーからテキストデータを取得してから、テキスト量に応じてScrollViewのContentSizeの高さを動的に設定するためには下記のような手順に従う必要があるみたいです。(もっと簡単な方法を知っている方がいたら教えて下さい。。)
手順
- StoryboardのmainビューにUIScrollViewを追加する
- UIScrollViewの中にUIViewを追加する
- 2で追加したUIViewにUITextViewを追加する
- UITextViewの\"Scroll Enabled\"を無効にする(チェックを外す)
- UIScrollViewに(leading,trailing,top,bottom)の4つのconstraintを定義する
- 2で追加したUIViewに(leading,trailing,top,bottom)の4つのconstraintを定義する
- 2で追加したUIViewに\"width equally\"の制約を定義する
- UITextViewに(leading,trailing,top,bottom,height)の5つのconstraintを定義する
- UITextViewのheight constraintのIBOutletをViewController.swiftに追加します。
@IBOutlet weak var textViewHeightConstraint: NSLayoutConstraint! - UIITextViewのheight constraintをプログラムで変更します。
self.textViewHeightConstraint.constant = self.textView.sizeThatFits(CGSizeMake(textView.frame.size.width, CGFloat.max)).height
サンプルソース
参考
UITextView inside UIScrollView with AutoLayout link