質問編集履歴

9

試した事を追記しました。

2021/12/10 16:57

投稿

tmyk1979
tmyk1979

スコア145

test CHANGED
File without changes
test CHANGED
@@ -90,9 +90,9 @@
90
90
 
91
91
  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
92
92
 
93
- let cell = TableView.dequeueReusableCell(withIdentifier: "TweetCell", for: indexPath)
93
+ let cell = TableView.dequeueReusableCell(withIdentifier: "TweetCell", for: indexPath) as! TweetCell
94
94
 
95
-
95
+
96
96
 
97
97
  func getTweet () -> Void{
98
98
 
@@ -102,21 +102,9 @@
102
102
 
103
103
 
104
104
 
105
- tableView.rowHeight = UITableView.automaticDimension
106
-
107
- cell.textLabel?.numberOfLines = 0
108
-
109
- cell.textLabel?.sizeToFit()
110
-
111
- cell.textLabel?.lineBreakMode = .byWordWrapping
112
-
113
- cell.textLabel?.translatesAutoresizingMaskIntoConstraints = false
105
+ cell.tweetLabel?.text = "(json[indexPath.row]["text"]),(json[indexPath.row]["text"]),(json[indexPath.row]["text"]),(json[indexPath.row]["text"])"
114
106
 
115
107
 
116
-
117
- cell.textLabel?.text = json[indexPath.row]["text"].string
118
-
119
-
120
108
 
121
109
  }, failure: { error in
122
110
 
@@ -128,11 +116,7 @@
128
116
 
129
117
  })
130
118
 
131
-
132
-
133
119
  }
134
-
135
-
136
120
 
137
121
  _ = getTweet()
138
122
 
@@ -143,6 +127,8 @@
143
127
  }
144
128
 
145
129
  }
130
+
131
+
146
132
 
147
133
  ```
148
134
 
@@ -160,6 +146,16 @@
160
146
 
161
147
 
162
148
 
149
+ TableViewControllerから作ってみたり、UIViewControllerにTableViewやTableViewCellを配置して作ってみたりしたのですが上手くいきませんでした。
150
+
151
+
152
+
153
+ また、TableViewCellにlabelを置く時にコードで書いて配置してみたり、ストーリーボードでドラッグ&ドロップで配置してみたりしたのですがうまく行きませんでした。
154
+
155
+
156
+
157
+
158
+
163
159
  ### 補足情報(FW/ツールのバージョンなど)
164
160
 
165
161
 

8

試した事を加筆しました。

2021/12/10 16:57

投稿

tmyk1979
tmyk1979

スコア145

test CHANGED
File without changes
test CHANGED
@@ -18,7 +18,9 @@
18
18
 
19
19
 
20
20
 
21
+ 最初はどのセルも2行で途中までしか表示されません。
22
+
21
- セルの再利用の際のリセットがうまく行っていないのか、スクロールするとセルの高さがおかしくなります。
23
+ また、セルの再利用の際のリセットがうまく行っていないのか、スクロールするとセルの高さがおかしくなります。
22
24
 
23
25
 
24
26
 
@@ -154,6 +156,10 @@
154
156
 
155
157
 
156
158
 
159
+ 「tableViewCell 高さ」とか「dequeueReusableCell リセット」とか検索して、見つかった限りのやり方は一通り試したのですがうまく行きませんでした。
160
+
161
+
162
+
157
163
  ### 補足情報(FW/ツールのバージョンなど)
158
164
 
159
165
 

7

試した事を少し修正しました。

2021/12/10 12:22

投稿

tmyk1979
tmyk1979

スコア145

test CHANGED
File without changes
test CHANGED
@@ -150,7 +150,7 @@
150
150
 
151
151
 
152
152
 
153
- ラベルに制約を付けたり、estimateRowHeightとautomaticDimentionを記述してみたりもしたのですが上手く行きませんでした。
153
+ ラベルに制約を付けたり、estimateRowHeightとautomaticDimentionを記述してみたりもしたのですが上手く行きませんでした。Twitterからのデータでなく、適当な配列を用意して試すとestimatedRowHeightとautomaticDimentionだけでも上手く行くのですが、Twitterからのデータを取得して並べようとすると上手く行きません。
154
154
 
155
155
 
156
156
 

6

さらに自分でアレコレ試した事を踏まえて質問内容を書き換えました。

2021/12/07 15:52

投稿

tmyk1979
tmyk1979

スコア145

test CHANGED
@@ -1 +1 @@
1
- 制約うまく付けられません。スクロールするとエラーが出ます。
1
+ SwiftのTableCell再利用する際にセルの高さをリセットしたい
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- Swifterを使って自作のアプリにTwitterの自分のツイートを20件並べたい。
5
+ Swifterを使って自作のアプリにTwitterの自分のツイートを内容を省略せずに20件並べたい。
6
6
 
7
7
 
8
8
 
@@ -14,15 +14,17 @@
14
14
 
15
15
  ツイートを並べる事はできたのですが、ツイートの内容が長いと途中までしか表示されません。
16
16
 
17
-
18
-
19
- セルの再利用の際のリセットうま行っいないというのあるかも知れいとは思うのです、自分でも分かるのは制約がうく付けられてないという事です。制約はコードで書いて付けたいと思っています。
17
+ また、内容くても不要余白生じてしまいます。
20
18
 
21
19
 
22
20
 
23
- ずは制約を正し付けたいと思っています。
21
+ セルの再利用の際のリセットがうまくっていないのか、スクロールするとセルの高さがおかしくなります。
24
22
 
23
+
24
+
25
+ セルの再利用の際にセルの高さをリセットできれば上手く表示できそうなのですが、リセットの仕方が分かりません。
26
+
25
- 正しい制約付け方、あるいは今制約どこが足りないのかを探る方法をいただけると助かります。
27
+ セル高さリセットの方法を教えていただけると助かります。
26
28
 
27
29
 
28
30
 
@@ -30,15 +32,7 @@
30
32
 
31
33
 
32
34
 
33
- ビルド時にはエラー出ていないのですが、画面を下にスクロールすると以下のようなエラーが出
34
-
35
-
36
-
37
- ```
38
-
39
- 2021-12-07 03:57:37.526755+0900 SwifterTwitterTimeline[15108:9108237] [Warning] Warning once only: Detected a case where constraints ambiguously suggest a height of zero for a table view cell's content view. We're considering the collapse unintentional and using standard height instead. Cell: <UITableViewCell: 0x100b39da0; frame = (0 826; 375 59); text = 'iOSアプリ開発の勉強中です。再度テストツイート。'; clipsToBounds = YES; autoresize = W; layer = <CALayer: 0x283c8ae80>>
40
-
41
- ```
35
+ エラー出ていません
42
36
 
43
37
 
44
38
 
@@ -104,7 +98,7 @@
104
98
 
105
99
  swifter.getTimeline(for: .screenName("@xxxxxxxx"),success: { json in
106
100
 
107
-
101
+
108
102
 
109
103
  tableView.rowHeight = UITableView.automaticDimension
110
104
 
@@ -114,17 +108,7 @@
114
108
 
115
109
  cell.textLabel?.lineBreakMode = .byWordWrapping
116
110
 
117
- cell.textLabel!.translatesAutoresizingMaskIntoConstraints = false
111
+ cell.textLabel?.translatesAutoresizingMaskIntoConstraints = false
118
-
119
-
120
-
121
- cell.topAnchor.constraint(equalTo: cell.contentView.topAnchor).isActive = true
122
-
123
- cell.rightAnchor.constraint(equalTo: cell.contentView.rightAnchor).isActive = true
124
-
125
- cell.leftAnchor.constraint(equalTo: cell.contentView.leftAnchor).isActive = true
126
-
127
- cell.bottomAnchor.constraint(equalTo: cell.contentView.bottomAnchor).isActive = true
128
112
 
129
113
 
130
114
 
@@ -166,13 +150,7 @@
166
150
 
167
151
 
168
152
 
169
- ラベルの高さについて制約を付けても見たのですが上手く行きませんでした。
170
-
171
- の再利用の際リセットできていない事が悪いのかも知れないのでestimateRowHeightとautomaticDimentionを記述してみたりもしたのですが上手く行きませんでした。
153
+ ラベルに制約を付けたり、estimateRowHeightとautomaticDimentionを記述してみたりもしたのですが上手く行きませんでした。
172
-
173
-
174
-
175
- 制約が正しく付けられていないのか、セルの再利用の際にリセットできていないのか(リセットの仕方もわかりません。高さの制約を0で付けてみたりしたのですが・・・)、その両方なのかも判断がつきません。
176
154
 
177
155
 
178
156
 

5

質問内容に少し加筆しました。

2021/12/06 21:36

投稿

tmyk1979
tmyk1979

スコア145

test CHANGED
File without changes
test CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
 
18
18
 
19
- セルの再利用の際のリセットがうまく行っていないというのもあると思うのですが、それ以前に制約がうまく付けられていない状態です。
19
+ セルの再利用の際のリセットがうまく行っていないというのもあるかも知れない思うのですが、自分でも分かるのは制約がうまく付けられていないという事です。制約はコードで書いて付けたいと思っています。
20
20
 
21
21
 
22
22
 

4

回答が付かない間に自分でアレコレやったので、それを踏まえて質問内容を変えました。

2021/12/06 19:19

投稿

tmyk1979
tmyk1979

スコア145

test CHANGED
@@ -1 +1 @@
1
- 自作アプリに自分のツイート並べたいのですがautomaticDimentionがうまく働いてくれません。
1
+ 制約をうまく付けられません。スクロールするとエラーが出ます。
test CHANGED
@@ -12,15 +12,17 @@
12
12
 
13
13
  Swifterを使って自分のツイートを並べるだけのアプリを作っています。
14
14
 
15
- ツイートを並べる事はできたのですが、heightForRowAtのautomaticDimentionでセルの高さを自動計算させ、ツイートの内容を全部表示させたのですが、内容が1行だけのセルでは高さが余計に算出され、複数行に渡る内容の場合は勝手にツイートの途中から途切てしう状況です
15
+ ツイートを並べる事はできたのですが、ツイートの内容が長途中までし表示されません
16
16
 
17
17
 
18
18
 
19
- 毎回特定のセル(ツイー)の表示おかしいというよりは、スクロールさせる度に新たに表示されるセル高さがおかしくな状態で、何もしかしたらセルの再利用の際高さリセットされていないのかも知れません
19
+ セル再利用の際のリトがうまく行ってないというのもあるとのですがそれ以前制約うまく付けられていない状態です
20
20
 
21
21
 
22
22
 
23
- セルの高さを正しく計算されるようにしたいと思っています。
23
+ まずは制約を正しく付けたいと思っています。
24
+
25
+ 正しい制約の付け方、あるいは今の制約のどこが足りないのかを探る方法をご教示いただけると助かります。
24
26
 
25
27
 
26
28
 
@@ -28,21 +30,13 @@
28
30
 
29
31
 
30
32
 
31
- 現時点ではエラーは特に出ていませんが、
32
-
33
- 制約つけた場合estimateRowHeightやautomaticDimentionと併用すると以下のような
33
+ ビルド時にはエラーが出ていないのですが、画面スクロールすると以下のようなエラーが出ます。
34
-
35
- エラーが出ます。
36
-
37
-
38
-
39
- 実現したいことができればestimateRowHeightやautomaticDimentionを使うでも制約を使うでも良いのですが、どちらも使わない、または併用するではうまく行っていません。
40
34
 
41
35
 
42
36
 
43
37
  ```
44
38
 
45
- 2021-12-06 00:38:46.078434+0900 SwifterTwitterTimeline[14651:8903291] *** Terminating app due to uncaught exception 'NSGenericException', reason: 'Unable to activate constraint with anchors <NSLayoutYAxisAnchor:0x281a9f4c0 "UITableViewLabel:0x10fe30770.top"> and <NSLayoutYAxisAnchor:0x281a9e2c0 "UITableViewCellContentView:0x10fe2fa40.top"> because they have no common ancestor. Does the constraint or its anchors reference items in different view hierarchies? That's illegal.
39
+ 2021-12-07 03:57:37.526755+0900 SwifterTwitterTimeline[15108:9108237] [Warning] Warning once only: Detected a case where constraints ambiguously suggest a height of zero for a table view cell's content view. We're considering the collapse unintentional and using standard height instead. Cell: <UITableViewCell: 0x100b39da0; frame = (0 826; 375 59); text = 'iOSアプリ開発の勉強中です。再度テストツイート。'; clipsToBounds = YES; autoresize = W; layer = <CALayer: 0x283c8ae80>>
46
40
 
47
41
  ```
48
42
 
@@ -62,9 +56,7 @@
62
56
 
63
57
 
64
58
 
65
- class TimelineViewController: UITableViewController {
59
+ class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
66
-
67
-
68
60
 
69
61
 
70
62
 
@@ -72,7 +64,11 @@
72
64
 
73
65
 
74
66
 
75
- let swifter = Swifter(consumerKey: "xxxxxxxxxxxxxxxxxxxxxx", consumerSecret: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
67
+ let swifter = Swifter(consumerKey: "xxxxxxxxxxxxxxxxxxxxxxxxx", consumerSecret: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
68
+
69
+
70
+
71
+ @IBOutlet weak var TableView: UITableView!
76
72
 
77
73
 
78
74
 
@@ -80,27 +76,15 @@
80
76
 
81
77
  super.viewDidLoad()
82
78
 
83
- }
79
+ TableView.dataSource = self
84
80
 
85
-
86
-
87
- // MARK: - Table view data source
81
+ TableView.delegate = self
88
-
89
-
90
-
91
- override func numberOfSections(in tableView: UITableView) -> Int {
92
-
93
- // #warning Incomplete implementation, return the number of sections
94
-
95
- return 1
96
82
 
97
83
  }
98
84
 
99
85
 
100
86
 
101
- override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
87
+ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
102
-
103
-
104
88
 
105
89
  return 20
106
90
 
@@ -108,11 +92,11 @@
108
92
 
109
93
 
110
94
 
111
- override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
95
+ func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
112
96
 
113
- let cell = tableView.dequeueReusableCell(withIdentifier: "TweetCell", for: indexPath)
97
+ let cell = TableView.dequeueReusableCell(withIdentifier: "TweetCell", for: indexPath)
114
98
 
115
-
99
+
116
100
 
117
101
  func getTweet () -> Void{
118
102
 
@@ -120,27 +104,33 @@
120
104
 
121
105
  swifter.getTimeline(for: .screenName("@xxxxxxxx"),success: { json in
122
106
 
123
-
107
+
124
108
 
125
- cell.textLabel?.translatesAutoresizingMaskIntoConstraints = false
109
+ tableView.rowHeight = UITableView.automaticDimension
126
-
127
-
128
110
 
129
111
  cell.textLabel?.numberOfLines = 0
130
112
 
113
+ cell.textLabel?.sizeToFit()
131
114
 
115
+ cell.textLabel?.lineBreakMode = .byWordWrapping
132
116
 
133
- cell.textLabel?.sizeToFit()
117
+ cell.textLabel!.translatesAutoresizingMaskIntoConstraints = false
134
118
 
135
119
 
136
120
 
137
- cell.textLabel?.lineBreakMode = .byWordWrapping
121
+ cell.topAnchor.constraint(equalTo: cell.contentView.topAnchor).isActive = true
138
122
 
123
+ cell.rightAnchor.constraint(equalTo: cell.contentView.rightAnchor).isActive = true
139
124
 
125
+ cell.leftAnchor.constraint(equalTo: cell.contentView.leftAnchor).isActive = true
126
+
127
+ cell.bottomAnchor.constraint(equalTo: cell.contentView.bottomAnchor).isActive = true
128
+
129
+
140
130
 
141
131
  cell.textLabel?.text = json[indexPath.row]["text"].string
142
132
 
143
-
133
+
144
134
 
145
135
  }, failure: { error in
146
136
 
@@ -166,18 +156,6 @@
166
156
 
167
157
  }
168
158
 
169
-
170
-
171
- override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
172
-
173
- tableView.estimatedRowHeight = 50
174
-
175
- tableView.rowHeight = UITableView.automaticDimension
176
-
177
- return tableView.rowHeight
178
-
179
- }
180
-
181
159
  }
182
160
 
183
161
  ```
@@ -188,57 +166,13 @@
188
166
 
189
167
 
190
168
 
191
- estimateRowHeightとautomaticDimentioncellForRowAtに書んでり、
169
+ ラベルの高さについて制約付けても見たのですが上手く行ませんで
192
170
 
193
- tableViewCellのラベルの上下左右に制約付けてみたり、その両方をしてみたりしたのですが
171
+ セルの再利用の際にリセットできていない事が悪いのかも知れないのでestimateRowHeightとautomaticDimention記述してみたりしたのですが上手く行きませんでした。
194
-
195
- 上手く行きませんでした。
196
172
 
197
173
 
198
174
 
199
- TwitterAPIのデータを使わずに配列を用意して各セルに代入するだけならestimateRowHeightとautomaticDimentionだけでセルの高さは正しく自動計算されましたが、TwitterAPIからデータを取得した途端にセルの高さの自動計算がおかしくなります。
200
-
201
-
202
-
203
- 制約を付ける場合は以下のような感じで付けていました。
204
-
205
-
206
-
207
- ```Swift
208
-
209
-
210
-
211
- cell.textLabel?.translatesAutoresizingMaskIntoConstraints = false
212
-
213
-
214
-
215
- cell.textLabel?.numberOfLines = 0
216
-
217
-
218
-
219
- cell.textLabel?.sizeToFit()
220
-
221
-
222
-
223
- cell.textLabel?.lineBreakMode = .byWordWrapping
224
-
225
-
226
-
227
- cell.textLabel?.topAnchor.constraint(equalTo: cell.contentView.topAnchor).isActive = true
228
-
229
- cell.textLabel?.rightAnchor.constraint(equalTo: cell.contentView.rightAnchor).isActive = true
230
-
231
- cell.textLabel?.leftAnchor.constraint(equalTo: cell.contentView.leftAnchor).isActive = true
232
-
233
- cell.textLabel?.bottomAnchor.constraint(equalTo: cell.contentView.bottomAnchor).isActive = true
175
+ 制約が正しく付けられていないのか、セルの再利用の際にリセットできていないのか(リセットの仕方もわかりません。高さの制約を0で付けてみたりしたのですが・・・)、その両方なのかも判断がつきません。
234
-
235
-
236
-
237
- cell.textLabel?.text = json[indexPath.row]["text"].string
238
-
239
- ```
240
-
241
-
242
176
 
243
177
 
244
178
 

3

試した事を少し修正しました。

2021/12/06 19:14

投稿

tmyk1979
tmyk1979

スコア145

test CHANGED
File without changes
test CHANGED
@@ -196,7 +196,7 @@
196
196
 
197
197
 
198
198
 
199
- TwitterAPIのデータを使わずに配列を用意して各セルに代入するだけならestimateRowHeightとautomaticDimentionも制約も付ない状態でセルの高さは正しく自動計算されましたが、TwitterAPIからデータを取得した途端にセルの高さの自動計算がおかしくなります。
199
+ TwitterAPIのデータを使わずに配列を用意して各セルに代入するだけならestimateRowHeightとautomaticDimentionけでセルの高さは正しく自動計算されましたが、TwitterAPIからデータを取得した途端にセルの高さの自動計算がおかしくなります。
200
200
 
201
201
 
202
202
 

2

試したことにさらに試した事を追記しました。

2021/12/05 18:27

投稿

tmyk1979
tmyk1979

スコア145

test CHANGED
File without changes
test CHANGED
@@ -196,6 +196,10 @@
196
196
 
197
197
 
198
198
 
199
+ TwitterAPIのデータを使わずに配列を用意して各セルに代入するだけならestimateRowHeightとautomaticDimentionも制約も付けない状態でセルの高さは正しく自動計算されましたが、TwitterAPIからデータを取得した途端にセルの高さの自動計算がおかしくなります。
200
+
201
+
202
+
199
203
  制約を付ける場合は以下のような感じで付けていました。
200
204
 
201
205
 

1

質問の内容をより詳しく書き直しました。

2021/12/05 17:59

投稿

tmyk1979
tmyk1979

スコア145

test CHANGED
File without changes
test CHANGED
@@ -16,6 +16,10 @@
16
16
 
17
17
 
18
18
 
19
+ 毎回特定のセル(ツイート)の表示がおかしいというよりは、スクロールさせる度に新たに表示されるセルの高さがおかしくなる状態で、何というか、もしかしたらセルの再利用の際に高さがリセットされていないのかも知れません。
20
+
21
+
22
+
19
23
  セルの高さを正しく計算されるようにしたいと思っています。
20
24
 
21
25