[Swift]Autolayout+UIScrollView上に動的なUITextViewを表示する

iOSアプリ開発

Autolayout+UIScrollView上に動的なUITextViewを表示しようと思ったのですが、なかなか一筋縄ではいかなかったので備忘録

やりたいこと

StoryboardでAutolayoutを有効にしながらUI設定をしつつ、UITextViewの中身は動的に変化する前提で、大量のテキストを表示する際にはスクロールするようにしたい。

tableView

Storyboardではあくまで静的情報をもとに制約を定義するため、サーバーからテキストデータを取得してから、テキスト量に応じてScrollViewのContentSizeの高さを動的に設定するためには下記のような手順に従う必要があるみたいです。(もっと簡単な方法を知っている方がいたら教えて下さい。。)

手順

  1. StoryboardのmainビューにUIScrollViewを追加する
  2. UIScrollViewの中にUIViewを追加する
  3. 2で追加したUIViewにUITextViewを追加する
  4. UITextViewの\”Scroll Enabled\”を無効にする(チェックを外す)
  5. UIScrollViewに(leading,trailing,top,bottom)の4つのconstraintを定義する
  6. 2で追加したUIViewに(leading,trailing,top,bottom)の4つのconstraintを定義する
  7. 2で追加したUIViewに\”width equally\”の制約を定義する
  8. UITextViewに(leading,trailing,top,bottom,height)の5つのconstraintを定義する
  9. UITextViewのheight constraintのIBOutletをViewController.swiftに追加します。
    @IBOutlet weak var textViewHeightConstraint: NSLayoutConstraint!
  10. UIITextViewのheight constraintをプログラムで変更します。
    self.textViewHeightConstraint.constant = self.textView.sizeThatFits(CGSizeMake(textView.frame.size.width, CGFloat.max)).height

サンプルソース

takezou621/TextViewSample
Contribute to takezou621/TextViewSample development by creating an account on GitHub.

参考

UITextView inside UIScrollView with AutoLayout link

コメント

タイトルとURLをコピーしました

Fatal error: Uncaught JSMin_UnterminatedRegExpException: JSMin: Unterminated RegExp at byte 90003: /Version\/10\.\d+(\.\d+)?( Mobile\/\w+)?Safari\; in /home/kusanagi/blog.takezou.com/DocumentRoot/wp-content/plugins/autoptimize/classes/external/php/jsmin.php:266 Stack trace: #0 /home/kusanagi/blog.takezou.com/DocumentRoot/wp-content/plugins/autoptimize/classes/external/php/jsmin.php(152): JSMin->action(1) #1 /home/kusanagi/blog.takezou.com/DocumentRoot/wp-content/plugins/autoptimize/classes/external/php/jsmin.php(86): JSMin->min() #2 /home/kusanagi/blog.takezou.com/DocumentRoot/wp-content/plugins/autoptimize/classes/autoptimizeSpeedupper.php(38): JSMin::minify('!function r(c,a...') #3 /home/kusanagi/blog.takezou.com/DocumentRoot/wp-includes/class-wp-hook.php(292): autoptimizeSpeedupper->js_snippetcacher('!function r(c,a...', '') #4 /home/kusanagi/blog.takezou.com/DocumentRoot/wp-includes/plugin.php(212): WP_Hook->apply_filters('!function r(c,a...', Array) #5 /home/kusanagi/blog.takezou.com/DocumentRoot/wp-content/plugins/a in /home/kusanagi/blog.takezou.com/DocumentRoot/wp-content/plugins/autoptimize/classes/external/php/jsmin.php on line 266