前提・実現したいこと
scrollViewのAutolayoutを正しく設定して、画面サイズに問わず、複数のimageViewを表示させたい。
[swift5]
発生している問題・エラーメッセージ
printデバッグでは、frameサイズは表示させたいものと同じ値が出ているのですが、imageViewが3枚とも同じサイズで表示されない。
実装は、baseViewの上にscrollViewを置き、その中にimageViewを呼び出しています。
こちらが制約です。
挙動状況 1枚目は、右側が合っていないのは顕著なのでお分かりだと思いますが、写真ではわからない点で、左にスクロールするとImageの左側とViewががあっていないです。
該当のソースコード
ViewController
1 2override func viewDidLoad() { 3 super.viewDidLoad() 4 5 //画面サイズを取得する 6 let myAppFrameSize = UIScreen.main.applicationFrame.size.width 7 8 baseView.frame = CGRect(x: 0, y: 0, width: myAppFrameSize, height: 260) 9 10 11 scrollView.isPagingEnabled = true 12 scrollView.frame = CGRect(x: 0, y: 0, width: myAppFrameSize, height: 260) 13 14 15 //pageContorollerの設定 16 pageControl.numberOfPages = images.count 17 print(myAppFrameSize) 18 19 for index in 0..<images.count { 20 frame.origin.x = scrollView.frame.size.width * CGFloat(index) 21 frame.size = scrollView.frame.size 22 23 print("ベイスビュー") 24 print(baseView.frame) 25 print("スクロールビュー") 26 print(scrollView.frame) 27 28 29 //imageViewを宣言 30 let imgView = UIImageView() 31 imgView.contentMode = .scaleAspectFill 32 33 switch index { 34 case 0: 35 imgView.frame = CGRect(x:0, y:0, width:myAppFrameSize, height:260 ) 36 print(imgView.frame) 37 print("1つめ") 38 print(imgView.frame.size.width) 39 case 1: 40 imgView.frame = CGRect(x: myAppFrameSize , y:0, width:myAppFrameSize, height:260 ) 41 print("2つめ") 42 print(imgView.frame.size.width) 43 case 2: 44 imgView.frame = CGRect(x:myAppFrameSize * 2 , y:0, width:myAppFrameSize, height:260 ) 45 print("3つめ") 46 print(imgView.frame) 47 48 49 default: 50 return 51 } 52 53 imgView.image = UIImage(named: images[index]) 54 scrollView.addSubview(imgView) 55 } 56 //content size を決める 57 scrollView.contentSize = CGSize(width:(scrollView.frame.size.width * CGFloat(images.count)), height: scrollView.frame.size.height) 58 scrollView.delegate = self 59 60 print("スクロールビュー のコンテント") 61 print(scrollView.contentSize) 62} 63 64 //scrollviewメソッド 65 //================================================ 66 func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { 67 var pageNumber = scrollView.contentOffset.x / 68 scrollView.frame.size.width 69 pageControl.currentPage = Int(pageNumber) 70 71 print("offset") 72 print(scrollView.contentOffset.x) 73 print(scrollView.frame.size.width) 74 75 76 } 77 78
試したこと
scrollViewをコード上で宣言して呼び出し、制約をつける。
printデバッグで、x,y座標と幅を表示させる。→ 出したい値は出ているが、解決しない。
補足情報(FW/ツールのバージョンなど)
frameの値は合っていると思うのですが、それ以外どの値をなおせば良いかわかっておりません。
説明不足な点が多々ありますが、どうか解決方法をご教授いだたけると幸いです。
よろしくお願いいたします。
あなたの回答
tips
プレビュー