🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Swift

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

Q&A

解決済

1回答

5258閲覧

ScrollViewの中に可変のUILabelを入れるとスクロールしないのはなぜでしょうか?

po_tato

総合スコア97

Swift

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

0グッド

1クリップ

投稿2019/12/16 09:52

タイトル、日付、メッセージ、返信用フィールド、送信ボタンを配置して、
メールフォームのような形の実装を行っているのですが、

ScrollViewの中に上から
Label1(タイトル_黄),
Label2(日付_赤),
Label3(メール本文_灰),
textView(返信内容入力欄_白)
button(送信ボタン_紫)

こちら、Label3(メール本文)のみ文字数が可変(100時の場合もあるし、1000字とかもある)になるのですが、
ある程度の数を超えると画面から見切れてスクロールできなくなります。
これはなにが原因でしょうか?
また、どの様に対処すべきでしょうか?

イメージ説明
イメージ説明

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

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

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

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

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

hayabusabusash

2019/12/17 00:30

Labelとかの下になるContentViewの高さって1000で固定していますか?
po_tato

2019/12/17 03:48

はい、1000の固定値を入れています!コード側にアウトレットして変動させているわけではありません。なぜこうなるのでしょうか。。。
guest

回答1

0

ベストアンサー

ScrollViewは子となるView(今回の場合はContentViewですね)の大きさをスクロール領域として決定します。

なので1000pxでContentViewの高さを固定している場合
スクロールできる領域は1000pxで固定されてしまい、中のラベルなどのコンテンツの量が多くなってしまうと見切れたりしてしまうと思います。
逆に現状テキストが少なくてもスクロールできるような状態なんじゃないかなと思います。

自分ならこういう時はStackViewを使用します。

まずScrollViewの上にラベルなど表示したい部品を載せます。
この状態ではScrollViewはスクロール領域を決定できないのでエラーが出ます。

ScrollView01

次に、上にのせた部品をStackViewで包んでしまいます。

ScrollView02

そしてStackViewの設定を以下のようにします。

ScrollView03

この設定でラベルなどが持つテキストの量に応じた大きさ(intrinsicContentSize)が使用されるので、
StackViewは中のコンテンツの量に応じて伸びるようになります。

最後にStackViewにScrollViewとの縦横ぴったりについて、
幅がScrollViewと同じになるような制約を付ければ完成です。

ScrollView04

TextViewを入れる場合はTextViewのScrolling Enabledをオフにしてください。
オンだとテキストに応じたサイズが使用されないので注意してください。

かなり雑に書いたので不明点等ありましたら、遠慮なく聞いていただけると嬉しいです????‍♂️

投稿2019/12/17 04:36

hayabusabusash

総合スコア767

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

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

po_tato

2019/12/17 05:08

おぉ!!まさにそのとおりでした! label3の文字数が少ない場合はスクロール出来、ある一定数の文字数になると見切れてスクロールできないということは、ContentViewの1000より大きい場合がダメなのか、だとしたらそのサイズをどうやったら可変に対応できるんだと悩んでおりました。stackViewは使用したことがなかったので目から鱗でした!早速実装してみてスクロール問題は希望通りの動きになりました!ありがとうございます!申し訳ございませんが、一つ質問させてください。こちらstackViewの中に内包したview郡は自動で縦並びになってくれていますが、各高さや、横幅、親(stackview)とのマージンなど指定可能なのでしょうか?
hayabusabusash

2019/12/17 05:16 編集

可能です???? ただちょっとだけ工夫が必要です。 現在StackViewの上にそのままラベルなどを載せていますが、 ラベルの下に一枚UIViewを追加して、追加したUIViewに対してラベルからAutoLayoutでスペースを指定すればマージン等を指定することができます。
po_tato

2019/12/17 05:21

了解致しました! 本当に分かりやすい解説で、親切丁寧に教えて頂きありがとうございます! 本当に助かりました!stackView勉強してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問