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

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

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

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

Swift

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

Q&A

解決済

1回答

3014閲覧

UITableViewCellのRow HeightをStoryboardから設定したせいで動的にレイアウトを変更する時に表示が崩れる

aojfoiajoaijfao

総合スコア7

Xcode

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

Swift

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

0グッド

1クリップ

投稿2018/02/07 06:28

Swiftで画像系SNSのiOSアプリを作っています。UITableViewCellのAutoLayoutについて質問させてください

Xcode側でTableViewCellのsize Inspectorのrow heightに設定した高さの中でAutoLayoutを作っています。

レイアウト

可変のもの
可変にしている理由はユーザーが投稿したテキストの長さに対応するためです。

  1. 撮影者のコメントが入ると書いているUILabel。ここは投稿者のコメントが入ります。
  2. ●件のコメントを見ると表示されているところが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の高さが伸びてしまいます。
イメージ説明

試したこと

  1. 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がある分の高さが空いたままになってしまいます。
イメージ説明

  1. 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

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんにちは!
セルのレイアウトの調整をした後にtableView.reloadRowsAtIndexPathsでそのセル(row)をリロードしてみるとどうでしょうか?

投稿2018/02/08 06:51

516k

総合スコア189

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

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

aojfoiajoaijfao

2018/02/09 07:49

出来ました! ありがとうございます!
516k

2018/02/10 13:10

やりましたね!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問