回答編集履歴

3

ボタンタップ後の高さの調整について追記しました。

2022/06/20 11:19

投稿

退会済みユーザー
test CHANGED
@@ -76,3 +76,23 @@
76
76
  > `if 66.5 <= contentHeight && contentHeight <= 100.0 { 処理の中身は変えず }` で試したところ
77
77
  の状態で確認してみてください。
78
78
 
79
+ ---
80
+
81
+ コメントありがとうございます。
82
+ 3つ目の追記です。
83
+
84
+ > しかし、ボタン押下後はボタン押下直前のcontentHeightの高さが残っているようでif trueに入ってしまいます・・・
85
+ ボタン押下直前のcontentHeightの高さというより、
86
+ 空の文字列にして、`self.testView.sizeToFit()`したことにより1行分の高さ(33程度?)になってしまっているのかもしれません。
87
+ すみません、すぐに良い方法が思いつかないので、、
88
+ やっぱり次のようにしてみたらどうでしょうか。
89
+
90
+ ```swift
91
+ @IBAction func tapButton(_ sender: Any) {
92
+ testView.text = "\n\n"
93
+ textViewDidChange(self.testView)
94
+ testView.text = ""
95
+ textViewDidChange(self.testView)
96
+ }
97
+ ```
98
+

2

テキストビューの高さの初期値が66.5の場合のコードを追記しました。

2022/06/20 04:45

投稿

退会済みユーザー
test CHANGED
@@ -48,3 +48,31 @@
48
48
  currentTextViewHeight = 80 // ***** 高さの初期値
49
49
  ```
50
50
 
51
+ ---
52
+
53
+ コメントありがとうございます。
54
+ 2つ目の追記です。
55
+
56
+ > スクロールが発生する高さになった場合、デフォルトの高さに戻すにはどうしたら良いでしょうか。。。?
57
+
58
+ 多分、テキストビューの高さは66.5で、それのコンテナーとなるビューの高さは80ということだと思いますので、
59
+ 次のような感じはどうでしょうか。
60
+
61
+ ```swift
62
+ @IBAction func tapButton(_ sender: Any) {
63
+ testView.text = ""
64
+ // textViewHeight.constant = 80
65
+ self.testView.translatesAutoresizingMaskIntoConstraints = true
66
+ self.testView.sizeToFit()
67
+ self.testView.isScrollEnabled = false
68
+ self.textViewHeight.constant = 66.5
69
+ self.testView.frame = CGRect(x: 60, y: 30, width: self.view.frame.width - 120, height: 66.5)
70
+ self.viewHeight.constant = 80
71
+ currentTextViewHeight = 66.5
72
+ }
73
+ ```
74
+
75
+ `textViewDidChange(_:)`メソッドの中は、
76
+ > `if 66.5 <= contentHeight && contentHeight <= 100.0 { 処理の中身は変えず }` で試したところ
77
+ の状態で確認してみてください。
78
+

1

3行分の高さが確保されるようなコードを追記しました。

2022/06/20 01:15

投稿

退会済みユーザー
test CHANGED
@@ -9,3 +9,42 @@
9
9
  }
10
10
  ```
11
11
 
12
+ ---
13
+
14
+ コメントありがとうございます。
15
+ 追記です。
16
+
17
+ すみません、StoryboardのConstraintsが再現できなくて、動きがどうなっているのか正しく把握できておりません・・
18
+
19
+ おそらく今はテキストの高さが80未満になっていて、
20
+ `textViewDidChange(_:)`メソッドのifのelseに入っているのかなと思っています。
21
+
22
+ すごく強引ですが、次のような感じはどうでしょうか。
23
+ 一旦、3行分だけのテキストを設定して、それでサイズを合わせます。
24
+ するとifのtrueの方の処理がされると思います。
25
+ それからテキストを空にしてサイズを合わせます。
26
+ するとifのelseの方の処理がされると思います。
27
+ 結果的に3行分の高さになると思うのですがどうでしょうか。
28
+
29
+ ```swift
30
+ testView.text = "1\n2\n3"
31
+ textViewDidChange(self.testView)
32
+ testView.text = ""
33
+ textViewDidChange(self.testView)
34
+ ```
35
+
36
+ 本当は、高さの初期値を確認しておいて、
37
+ その初期値を設定する処理をした方が良いのかなと思います。
38
+ (`textViewDidChange(_:)`メソッドのifのtrueの処理と同等のことをする感じです)
39
+ (再現できていないのでわからないのですが、高さの初期値は80なのでしょうか)
40
+
41
+ ```swift
42
+ self.testView.translatesAutoresizingMaskIntoConstraints = true
43
+ self.testView.sizeToFit()
44
+ self.testView.isScrollEnabled = false
45
+ self.textViewHeight.constant = 80 // ***** 高さの初期値
46
+ self.testView.frame = CGRect(x: 60, y: 30, width: self.view.frame.width - 120, height: 80) // ***** 高さの初期値
47
+ self.viewHeight.constant = 80 // ***** 高さの初期値
48
+ currentTextViewHeight = 80 // ***** 高さの初期値
49
+ ```
50
+