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

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

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

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

Swift

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

Q&A

解決済

1回答

4589閲覧

TableViewでセルが非表示のときにセルの高さを0にしたい

poemt

総合スコア48

Xcode

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

Swift

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

0グッド

0クリップ

投稿2018/08/17 02:15

いつもお世話になっております。

前提・実現したいこと

掲題のとおりですが、セルが非表示となっているときにそのセルの高さを0にしたいです。
=>そのセルの高さの分を上に詰めたい。

発生している問題・エラーメッセージ

非表示のセルの高さ分で上に詰められませんでした。(というかセルが全て表示されなかった)

該当のソースコード

Swift

1func tableView(_ tableView: UITableView, cellForRowAt inedxPath: IndexPath) -> UITableViewCell { 2 let cell = tableView.dequeueReusableCell(withIdentifier: "customCell", for: indexPath) 3 if let customCell = cell as? CustomCell { 4 // セルの非表示設定 5 // boolListはセルの表示を設定するためのBoolの配列です。 6 // セル数もboolList分用意しました。 7 customCell.isHidden = boolList[indexPath.row] 8 } 9 return cell 10} 11 12func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 13 let cell = tableView.cellForRow(at: indexPath) 14 if cell == nil { 15 // セルが非表示ならcellForRow(at:)はnilを返すとのことなので 16 // 非表示のときは高さ0を返す想定です 17 return 0 // ★ 18 } 19 return UItableView.automaticDimension 20}

試したこと

上記のコードを動かしたところセルが全て非表示になっていました。
ブレークを設定して確認すると、tableView(_, heightForRowAt)が全て★の0を返す行で実行されていましたので、実際には全てのセルの高さが0になっていたみたいでした。

補足情報(FW/ツールのバージョンなど)

Xcode 10.0 beta 4
Seift4.2

tableViewの基本的なことが分かっていないだけなのかもしれませんが、ご教示いただけると幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

https://developer.apple.com/documentation/uikit/uitableviewdatasource/1614931-tableview

まずは表示すべき行数を決め、その表示する行に所望の内容を設定するという流れになります。
行数を決めるのが上に記載のnumberOfRowsInSectionです。
あくまで内容を設定する場所が提示されたコードの部分です(cellForRowAt)

セルを非表示にしたい場合、それを考慮した行数をnumberOfRowsInSectionで返却すれば良いのです。

投稿2018/08/17 02:28

t_obara

総合スコア5488

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

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

poemt

2018/08/17 02:50

回答していただきありがとうございます。 numberOfRowsInSectionのところで boolList.filter{!$0}.count を返すようにしたところ、行数は表示するはずのセルの数となったのですが、非表示となっていたセルの高さ分だけ空白が表示されていました (そのため表示するはずだったセルがいくつか表示されていませんでした)。 他に気をつけるところがあるのでしょうか?
t_obara

2018/08/17 03:02

cellForRowAtは表示する行のみ利用することになります。非表示データを扱おうとしていませんか?
poemt

2018/08/17 04:41 編集

すみません、表示する行のみ利用するということでしたら cellForRowAtでcustomCell.isHidden=boolList[indexPath.row] を指定しているのがそもそも誤っている、という認識でいいのでしょうか? つまり、boolList側に対して、表示しない場合はその要素を削除し、あらかじめboolListは表示する要素だけ(今回の場合だとtrueのみ)保持するようにしないといけないのでしょうか。 (cuxtomCellはラベルとかは保持していますが、今回はそのラベルとかに対してはなにも設定・取得していないので非表示データとはならないかと思っています)
poemt

2018/08/17 05:19

boolListをcellForRowAtで使う前にtrueだけ保持するようにしたところうまくいきました。 お時間割いていただいてありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問