前提・実現したいこと
UIScrollViewの上に、viewやtableViewなどをコードで配置したいです。
今回はレイアウトを指定する際に、SnapKitと言う有名なpodを使用しました。
ただ、スナップキットを使用して、scrollView上のオブジェクト(今回はviewとtableView)の制約を決定したのですが、なぜかうまく動きません。
教えていただけるとありがたいです。よろしくお願いします。
該当のソースコード
Swift
1import UIKit 2import SnapKit 3 4class ViewController: UIViewController { 5 6 @IBOutlet weak var scrollView: UIScrollView! 7 @IBOutlet weak var baseView: UIView! 8 @IBOutlet weak var tableView: UITableView! 9 @IBOutlet weak var profileView: UIView! 10 11 override func viewDidLoad() { 12 super.viewDidLoad() 13 scrollView.delegate = self 14 tableView.delegate = self 15 tableView.dataSource = self 16 SNPLayout() 17 setScrollView() 18 self.view.addSubview(scrollView) 19 } 20 21 func setScrollView() { 22 self.scrollView.contentSize = CGSize(width: self.view.frame.size.width, height: 1000) 23 self.scrollView.addSubview(baseView) 24 self.scrollView.addSubview(tableView) 25 } 26 27 func SNPLayout() { 28 scrollView.snp.makeConstraints { make in 29 make.center.equalToSuperview() 30 make.left.equalToSuperview() 31 make.right.equalToSuperview() 32 make.top.equalToSuperview() 33 make.bottom.equalToSuperview() 34 } 35 baseView.snp.makeConstraints { make in 36 make.left.equalTo(scrollView.snp.left) 37 make.top.equalTo(scrollView.snp.top) 38 make.right.equalTo(scrollView.snp.right) 39 make.height.equalTo(207) 40 } 41 tableView.snp.makeConstraints { make in 42 make.left.equalTo(scrollView.snp.left) 43 make.right.equalTo(scrollView.snp.right) 44 make.top.equalTo(baseView.snp.bottom) 45 make.bottom.equalTo(scrollView.snp.bottom) 46 } 47 profileView.snp.makeConstraints { make in 48 make.left.equalTo(scrollView.snp.left).offset(20) 49 make.top.equalTo(scrollView.snp.top).offset(20) 50 make.size.equalTo(40) 51 } 52 53 } 54 55 56 57} 58 59//MARK:- UITableviewDeleagte 60extension ViewController: UITableViewDelegate { 61 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 62 return 40 63 } 64} 65 66//MARK:- UITableViewDataSource 67 68extension ViewController: UITableViewDataSource { 69 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 70 return 100 71 } 72 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 73 let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) 74 return cell 75 76 } 77} 78 79//MARK:- UIScrollViewDelgate 80extension ViewController: UIScrollViewDelegate { 81 func scrollViewWillBeginDragging(_ scrollView: UIScrollView) { 82 print("Scroll is starting now!") 83 } 84 85 86} 87
試したこと
ここで、scrollViewの中身のオブジェクト(今回はviewとtableView)の制約をコメントアウトするとしっかりと作動しましたが、それだと当たり前なのですが、他画面対応できないので困っています。
教えていただけると嬉しいです。よろしくお願いします。
あなたの回答
tips
プレビュー