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

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

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

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

0回答

1029閲覧

どの画面サイズにも対応したScrollViewの中に複数のimageViewを表示する方法

nao.0728.2017

総合スコア0

iOS

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

2クリップ

投稿2020/05/16 08:41

前提・実現したいこと

[swift5]
どの画面サイズでも、画面内に収まるようにscrollViewの中に3つのimageVIewを横スライドで実装したい。

発生している問題

カスタムセル内で実装しているのですが、scrollViewをstoryboard上で制約をつけようとしたのですが、なかなかできなかったので、storyboardには、scrollViewの設置する位置にContainerViewを設置しました。
その中にscrollViewをコードで宣言、設置し、その中にimageViewを宣言し表示させようと思っております。
基本的に、iphone8で実装し、表示することはできるのですが、機種を変えて実装するとはみ出てしまったりしてしまい、なかなか制約がうまく行きません。

真ん中の灰色の部分がContainerViewです。
イメージ説明

該当のソースコード

TableViewCell

1 override func awakeFromNib() { 2 super.awakeFromNib() 3 4 5 let scrollView = UIScrollView() 6 //scrollViewを入れる 7 addSubview(scrollView) 8 scrollView.isPagingEnabled = true 9 scrollView.frame = containerView.frame 10 11 12 pageControl.numberOfPages = circleSampleImage.count 13 for index in 0..<circleSampleImage.count { 14 frame.origin.x = scrollView.frame.size.width * CGFloat(index) 15 frame.size = scrollView.frame.size 16 17 18 let imgView = UIImageView() 19 20 switch index { 21 case 0: 22 imgView.frame = CGRect(x:0, y:0, width:self.bounds.width, height:260 ) 23 print(imgView.bounds.width) 24 case 1: 25 imgView.frame = CGRect(x:self.bounds.width, y:0, width:self.bounds.width, height:260 ) 26 case 2: 27 imgView.frame = CGRect(x:self.bounds.width * 2, y:0, width:self.bounds.width, height:260 ) 28 29 default: 30 return 31 } 32 33 imgView.image = UIImage(named: circleSampleImage[index]) 34 scrollView.addSubview(imgView) 35 } 36 37 //content size を決める 38 scrollView.contentSize = CGSize(width:(scrollView.frame.size.width * CGFloat(circleSampleImage.count)), height: scrollView.frame.size.height) 39 scrollView.delegate = self 40

こう実装しているのですが、
iphoneSEでは、画像が収まらなく、iphoneXRでは余ってしまいます。
iPhoneXR↓
イメージ説明
iPhoneSE↓
イメージ説明

試したこと

imageSizeをcontainerViewのサイズに合わせようとした。
scrollViewをstoryboardに配置し、そこで制約をかけようとした(できなかった。)

補足情報

この制約、画面サイズにも対応できる実装方法を教えていただきたいです。
かなり大雑把な質問で大変申し訳ありません。
この実装方法以外でより実現可能性が高いものがもしありましたら、教えていただけると幸いです。

よろしくお願いいたします。

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

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

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

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

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

hoshi-takanori

2020/05/16 17:58

たぶん awakeFromNib の時点では画面サイズとか関知してないと思うので、layoutSubviews で subview のレイアウトを調整する必要があるのではないかと。あと、frame という変数が宣言されてませんが、cell 自体の frame が変更されてしまってるのでは。
nao.0728.2017

2020/05/17 01:16

ご回答ありがとうございます。 frameを宣言してから、imageViewが出てくるレイアウトサイズを決めたら実装できました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問