Swiftで画像系SNSのiOSアプリを作っています。UITableViewCellのAutoLayoutについて質問させてください
Xcode側でTableViewCellのsize Inspectorのrow heightに設定した高さの中でAutoLayoutを作っています。
可変のもの
可変にしている理由はユーザーが投稿したテキストの長さに対応するためです。
- 撮影者のコメントが入ると書いているUILabel。ここは投稿者のコメントが入ります。
- ●件のコメントを見ると表示されているところがUIButtonになっていて、ここをタップすると表示されるユーザーのコメント一覧(UIViewに各コメントをコード側でaddSubviewしていく。)
Cellの高さはaddSubViewされるコメントの数・長さによって可変になるようにコード側で
swift
1// セルの高さ可変のための設定 2 tableView.estimatedRowHeight = 1000 3 tableView.rowHeight = UITableViewAutomaticDimension
としていて動作確認済みです。
また、SNSで利用されるデータはAWSのEC2サーバーでMySQLで管理していて、Railsを使ってiOSアプリから送信されるAPIリクエストに対して値を返しています。
発生している問題・エラーメッセージ
コメントが0件の時にUIButtonの高さの制約を0.0に、alphaプロパティを0にして非表示にしたいと考えていました。しかし、実際に0件にしてみると、以下のように投稿者のコメントが入ったUILabelの高さが伸びてしまいます。
試したこと
- cellに表示する内容を指定するcellForRowAtメソッド内でコメントが0件の時にUIButtonの高さを0にする制約をtrueにした。
swift
1// トグルしているかどうかを確認する。 2cell?.toggleButton.isEnabled = toggleBoolArray[indexPath.row] 3cell?.toggleButton.heightAnchor.constraint(equalToConstant: 0.0) 4cell?.toggleButton.alpha = 0 5cell?.layoutIfNeeded()
この場合以下のようにコメント下部のUIButtonがある分の高さが空いたままになってしまいます。
- UIButtonの制約をStoryboard上で0にしてみた
投稿者のコメントを表示するUILabelの高さがUIButtonの高さが0になった分伸びてしまいます。
最終的に実現したいこと
ViewDidLoadメソッド内で読み込まれて、CellForRowAtメソッド内で値をセットされるコメントが0件の時に、UIButtonの高さがマイナスされて、その影響でUILabel等の高さがかわることなく、その分Cellの高さ自体が変わるようにしたいです。
この場合UIButtonの高さを0にした状態での合計の高さをUITableViewCellのSize InspectorのRow Heightに設定してレイアウトを作り、表示の時にユーザーのコメントを表示させるUIButtonの高さを設定するべきですか?(この場合だと386からUIButtonの高さを引いた355)
またはそのようなことをせずともUIButtonの高さを0に出来るのでしょうか?
補足情報(FW/ツールのバージョンなど)
Swiftのバージョン:Swift4
Xcodeのバージョン:Version 9.2
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/09 07:49
2018/02/10 13:10