質問編集履歴
9
試した事を追記しました。
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.te
|
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
試した事を加筆しました。
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
試した事を少し修正しました。
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
さらに自分でアレコレ試した事を踏まえて質問内容を書き換えました。
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
|
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
|
-
|
153
|
+
ラベルに制約を付けたり、estimateRowHeightとautomaticDimentionを記述してみたりもしたのですが上手く行きませんでした。
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
制約が正しく付けられていないのか、セルの再利用の際にリセットできていないのか(リセットの仕方もわかりません。高さの制約を0で付けてみたりしたのですが・・・)、その両方なのかも判断がつきません。
|
176
154
|
|
177
155
|
|
178
156
|
|
5
質問内容に少し加筆しました。
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
回答が付かない間に自分でアレコレやったので、それを踏まえて質問内容を変えました。
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
制約をうまく付けられません。スクロールするとエラーが出ます。
|
test
CHANGED
@@ -12,15 +12,17 @@
|
|
12
12
|
|
13
13
|
Swifterを使って自分のツイートを並べるだけのアプリを作っています。
|
14
14
|
|
15
|
-
ツイートを並べる事はできたのですが、
|
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
|
-
|
33
|
+
ビルド時にはエラーが出ていないのですが、画面を下にスクロールすると以下のようなエラーが出ます。
|
34
|
-
|
35
|
-
エラーが出ます。
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
実現したいことができればestimateRowHeightやautomaticDimentionを使うでも制約を使うでも良いのですが、どちらも使わない、または併用するではうまく行っていません。
|
40
34
|
|
41
35
|
|
42
36
|
|
43
37
|
```
|
44
38
|
|
45
|
-
2021-12-0
|
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
|
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
|
-
|
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
|
-
|
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
|
-
|
95
|
+
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
112
96
|
|
113
|
-
let cell =
|
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
|
-
|
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
|
117
|
+
cell.textLabel!.translatesAutoresizingMaskIntoConstraints = false
|
134
118
|
|
135
119
|
|
136
120
|
|
137
|
-
cell.t
|
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
|
-
|
169
|
+
ラベルの高さについて制約を付けても見たのですが上手く行きませんでした。
|
192
170
|
|
193
|
-
ta
|
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
|
-
|
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
試した事を少し修正しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -196,7 +196,7 @@
|
|
196
196
|
|
197
197
|
|
198
198
|
|
199
|
-
TwitterAPIのデータを使わずに配列を用意して各セルに代入するだけならestimateRowHeightとautomaticDimention
|
199
|
+
TwitterAPIのデータを使わずに配列を用意して各セルに代入するだけならestimateRowHeightとautomaticDimentionだけでセルの高さは正しく自動計算されましたが、TwitterAPIからデータを取得した途端にセルの高さの自動計算がおかしくなります。
|
200
200
|
|
201
201
|
|
202
202
|
|
2
試したことにさらに試した事を追記しました。
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
質問の内容をより詳しく書き直しました。
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
|
|