質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1503閲覧

xibファイルで作成したセルの中のtextviewの高さを文字量に応じて可変させたい。

samson66

総合スコア35

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/09/04 08:47

編集2019/09/04 14:12

やりたいこと
xibファイルで作成したセルの中のtextviewの高さを文字量に応じて可変したい

行ったこと
UITextViewのプロパティからScroll ViewのScrollingのScrolling Enabledのチェックを外し、
UITextViewの高さHeight ConstraintのRelationをLess Than or Equalに変更
UITextViewのBottom ConstraintのRelationをGreater Than or Equalに変更

困っていること
オートレイアウトを設定したことにより、textviewの高さが文字量に反応しなくなった(1行分の高さより変わらず)

StoryBoard
イメージ説明

ViewController

ViewController

1import UIKit 2 3class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource { 4 5 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 6 let cell = table.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! OsakaCell 7 return cell 8 } 9 10 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 11 return 20 12 } 13 14 @IBOutlet weak var table: UITableView! 15 16 override func viewDidLoad() { 17 super.viewDidLoad() 18 // Do any additional setup after loading the view. 19 table.delegate = self 20 table.dataSource = self 21 22 table.rowHeight = UITableViewAutomaticDimension 23 table.estimatedRowHeight = 10000 24 // Identifierを設定 25 table.register(UINib(nibName: "Cell", bundle: nil), forCellReuseIdentifier: "cell") 26 } 27}

Cell

1import UIKit 2 3class Cell: UITableViewCell,UITextViewDelegate { 4 5 @IBOutlet weak var tv: UITextView! 6 7 override func awakeFromNib() { 8 super.awakeFromNib() 9 // Initialization code 10 tv.delegate = self 11 } 12 13 override func setSelected(_ selected: Bool, animated: Bool) { 14 super.setSelected(selected, animated: animated) 15 // Configure the view for the selected state 16 } 17}

シミュレーター
イメージ説明

追記 textviewのheightの制約を外し、bottomの制約をLess Than or Equalにしたところtextviewの高さが反応するもセルの配置が崩壊。
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayabusabusash

2019/09/04 11:31

TextViewのScrolling Enabledのチェックを外したらどうなりますか?
samson66

2019/09/04 13:07

わかりにくかったらごめんなさい。 「textview」のアトリビュートインスペクタの項目Scroll ViewのところでScrolling Enabledのチェックを既に外しています。 オートレイアウトを設定する前はそれでうまく文字量に応じてtextviewが下に伸びましたが、オートレイアウトを設定したところ反応しなくなりました。 オートレイアウトに問題がありますでしょうか?
hayabusabusash

2019/09/04 13:12

すみません、すで行ったことに書いてありましたね。 TextViewの高さの制約って外したらオートレイアウトでエラーになりますか?
samson66

2019/09/04 14:14

TextViewの高さの制約を外したところエラーは出ませんでした。 そのままシュミレーターを起動させましたが、textviewの高さに反応は出ませんでした。 そこでtextviewのbottomの制約を「Greater Than or Equal」から「Less Than or Equal」にしたところtextviewの高さが反応しましたがセルの配置が崩壊してしまいました(追記に載せました)。
hayabusabusash

2019/09/04 14:16

追記ありがとうございます。 こちらも同じようなレイアウトを作ってみて確認します。少々お待ちください。
guest

回答1

0

ベストアンサー

手元で確認しました。
以下の画像のような制約をつけてみました。

Cellのxib

どのようなデータが表示されるのかわからなかったので、
とりあえずエラーが出ない形で実装してみました。

背景色が青のラベルは上から16pxの余白、右から16pxの余白、高さを21pxで固定しています。
TextViewは青のラベルとの間に16px、左右から16px、下方向に16pxの余白で固定しました。

あとはTextViewのScrolling Enabledをオフにして、
TableViewのrowHeightautomaticDimensionに設定しました。

これを実行すると以下のようになりました。

実行結果

投稿2019/09/04 14:32

hayabusabusash

総合スコア767

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

samson66

2019/09/05 03:07

わざわざ再現していただき、ありがとうございましたm(_ _)m 空の状態のtextviewにシミュレーターにて文字を入力していくとオートレイアウトの崩壊が起きましたが(追記の状態)、データを用意しておいてtextview.textにコード側で反映されるようにしたところオートレイアウトは崩れずに反映されていました。 原因はデータを動的にtextviewに入力し反映させていくやり方の記事を参考の一つ(今回は実現したい内容ではない)にしていたことでデータをコード側に用意していませんでした(汗) (参考元 https://qiita.com/mishimay/items/619f9ce60b4fabc1612f ) 無事解決できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問