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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

Q&A

解決済

2回答

676閲覧

collection viewの制約(constraints)を付けると、画面に表示されなくなります。

yamaji1108

総合スコア19

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

0グッド

0クリップ

投稿2019/08/15 13:30

編集2019/08/16 06:33

前提・実現したいこと

度々の質問失礼致します。初学者で分からないことが多く、またこちらにお世話になります。
因数分解を練習するアプリを開発しております。
画面に配置するラベル、ボタン、イメージ、コレクション等の位置を、直接座標で指定するのではなく、制約によって指定しようと試みました。

発生している問題

他のアイテムと同様、CollectionView1も制約(x座標がセンターから-70, y座標がセンターから+70)を付けたところ、画面にCollectionView1が表示されなくなりました。

設定画面

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

実行画面

イメージ説明

試したこと

CollectionView1の位置を直接座標で指定する場合であれば、画面に表示することができます。

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

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

Xcodeのバージョンは10.3です。
シミュレータはiPhoneXsです。

画像を追加しました
イメージ説明

更に画面を追加しました。

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

意図したことが出来ました!

イメージ説明

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

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

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

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

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

guest

回答2

0

ベストアンサー

CollectionView1も制約(x座標がセンターから-70, y座標がセンターから+70)を付けたところ、画面にCollectionView1が表示されなくなりました。

他の方がおっしゃっている通り、これだけでは幅と高さの制約がないため表示されていないんだと思います。

画像を見ると「解いた数」のUILabelと「Enter」のUIButton、端末の右端と下に対して余白を設定する形でAutoLayoutの制約をつければ表示されると思います。

かなり雑ですが以下の画像のようにしてみました。

AutoLayout

投稿2019/08/16 05:45

hayabusabusash

総合スコア767

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

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

yamaji1108

2019/08/16 06:20

コメントありがとうございます! 仰せの通りに、解いた数・Enterボタン・左端・下に対して余白の制約を付けた状態で、実行してみたところ、追加画像のようになり、Enterボタンの位置が変わってしまい、コレクションも表示されませんでした。 (デバックエリアに出力されたCollectionView1の情報も、「contentSize: {0,0}」を示しております。。) Enterボタンには何も制約を付けていないのですが、これも関係しているのでしょうか。 色々聞いてしまい、申し訳ありません。
hayabusabusash

2019/08/16 06:24

ご確認ありがとうございます! そうですね。 周りのボタンやラベルにも制約を付けていただく必要があるので付けていただけないでしょうか? 制約がないままだと他の大きさの端末で実行した際にずれると思うので、 全ての部品に制約をつけることをおすすめします!
yamaji1108

2019/08/16 06:35

今ご指摘いただいた通り、Enterボタンにも制約を付けた後に、上記のCollectionView周りの制約を付けて実行したら、しっかりコレクションが表示されました!(最終画像を追加しました。) 感謝です。本当にありがとうございました!
guest

0

調べるためにprint(collectionView)をviewdidAppear()内に書いてみるのも手だと思います。
frameをコンソールに出力してくれるので、実際に設定した場合との違いを比べてみたらどうでしょう?

完全に当てずっぽうですが、直接座標で指定する時は、frameを設定しているので、
widthとheightも設定されていますが、制約の時は、widthとheightが設定されておらず、
0で出力されていて見えないのではないですか???
storyboard上でviewの枠が赤い状態になってないですか???

ちなみにviewdidload()の後に制約は設定されるようなので、viewdidload内に書いても、
設定前の値が出るだけで、そちらの値は参考になりませんのでお間違いの無いように。

投稿2019/08/15 17:54

hameji

総合スコア1380

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

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

yamaji1108

2019/08/16 01:50

ご回答いただき、ありがとうございます!目から鱗です。 仰せの通りprint(collectionView)をコードに追加したところ、上記のように出力されたのですが、 frame = (117.667 476; 0 0) ということは、widthもheightも0となってしまっている状態でしょうか。 設定画面でwidthもheightを設定しているのに、0になってしまう場合は、コード側で設定する必要がありますか。 聞いてばかりで申し訳ありません。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問