LoginSignup
1
1

More than 3 years have passed since last update.

Swift UIScrollViewの使い方

Posted at

UIScrollViewをコードで実装

独学でアプリ制作しているんですけど、そういえばscrollView使ったことないなと思ったので勉強しました!
まず、全く調べずにscrollViewを使ってみようとしました。
そのコードがこちら

class ViewController: UIViewController {

    private let label = UILabel()

    override func viewDidLoad() {
        super.viewDidLoad()

        let scrollView = UIScrollView()

        scrollView.frame = .init(x: 0, y: 0, 
            width: view.frame.size.width, height: view.frame.size.height)

        view.addSubview(scrollView)
        scrollView.addSubview(label)

        label.text = "hello world"
        label.frame = .init(x: 0, y: 0, width: 100, height: 50)
        label.center = scrollView.center
    }

}

結果はスクロールできませんでした。
labelscrollViewがちゃんと表示されているか確認するために追加しています。

なんで!?と思い調べてみるとcontentSizeというものを指定しないといけないらしい。
contentSizeはスクロール領域を決めるらしい。
ということで修正したものがこちら

class ViewController: UIViewController {

    private let label = UILabel()

    override func viewDidLoad() {
        super.viewDidLoad()

        let scrollView = UIScrollView()

        //scrollViewの大きさを設定。
        scrollView.frame = .init(x: 0, y: 0, 
            width: view.frame.size.width * 2, height: view.frame.size.height * 2)

        //スクロール領域の設定
        scrollView.contentSize = CGSize(width:view.frame.size.width * 2, height:view.frame.size.height * 2)

        //scrollViewをviewのSubViewとして追加
        view.addSubview(scrollView)
        scrollView.addSubview(label)

        label.text = "hello world"
        label.frame = .init(x: 0, y: 0, width: 100, height: 50)
        label.center = scrollView.center
    }

}

これでどうだ!と思いビルドしましたがスクロールできませんでした。

さらに調べると、framecontentSizeより小さくないといけないみたい。

class ViewController: UIViewController {

    private let label = UILabel()

    override func viewDidLoad() {
        super.viewDidLoad()

        let scrollView = UIScrollView()

        //scrollViewの大きさを設定。
        scrollView.frame = .init(x: 0, y: 0, 
            width: view.frame.size.width, height: view.frame.size.height)

        //スクロール領域の設定
        scrollView.contentSize = CGSize(width:view.frame.size.width * 2, height:view.frame.size.height * 2)

        //scrollViewをviewのSubViewとして追加
        view.addSubview(scrollView)
        scrollView.addSubview(label)

        label.text = "hello world"
        label.frame = .init(x: 0, y: 0, width: 100, height: 50)
        label.center = scrollView.center
    }

}

結果は...いけたーーーー!!!

まとめ

UIScrollViewを使うときは

contentSizeを指定しないといけない
contentSizeframeより大きくないといけない

ということに注意して実装しましょう!

引用

[Swift4]スクロールビューの使い方

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1