0
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ScrollViewを使ってみた

Last updated at Posted at 2020-09-10

ScrollViewとは?

SwiftUIで縦スクロール、もしくは横スクロールするためのシンプルなビューです。所属団体の内部勉強会向け(いつになるかわからないが)にサンプルを作成しました。
以下サンプルアプリの画像です。
スクリーンショット 2020-09-10 21.23.39.png

縦スクロール

struct ContentView: View {
    var body: some View {
        ScrollView(.vertical, showsIndicators: false) {
            VStack(spacing: 30) {
                ForEach(0..<30) {
                    Text("\($0)")
                }
            }
        }
    }
}

縦スクロールの場合は、ScrollViewの中はVStackでなければならないです。
また、showsIndicatorsでインジケータの表示非表示を設定できます。

横スクロール

struct ContentView: View {
    var body: some View {
        ScrollView(.horizontal) {
            HStack(spacing: 30) {
                ForEach(0..<30) {
                    Text("\($0)")
                }
            }
        }.padding(.leading, 10) //ここで左側に少しスペースを持たせてあげることで見やすくなります
    }
}

横スクロールの場合は、逆にScrollViewの中はHStackでなければならないです。

サンプルコード

FirstCellView、SecondCellView、ThirdCellViewは別途でファイルを作っています。
ここではContentViewの記述のみです。

ContentView.swift
struct ContentView: View {
	
	@State var num: Int = 0
	
	var body: some View {
		VStack {
			NavigationView {
				VStack {
					Text("")
						.navigationBarTitle(Text("ScrollViewSample").font(.subheadline), displayMode: .large)
					VStack {
						ScrollView(.vertical) {
							//Firstの部分ScrollView
							Text("First")
								.font(.title)
								.bold()
								.frame(width: 340, height: 20, alignment: .leading)
							ScrollView(.horizontal) {
								HStack(spacing: 30) {
									ForEach(0..<30) {num in
										//cornerRadiusなし
										FirstCellView(num: num)
											.foregroundColor(Color.orange)
											.border(Color.orange, width: 2)
									}
								}
							}.padding(.leading, 10)
							Spacer().frame(height: 30)
							
							//Secondの部分ScrollView
							Text("Second")
								.font(.title)
								.bold()
								.frame(width: 340, height: 20, alignment: .leading)
							//インジケーター無し
							ScrollView(.horizontal, showsIndicators: false) {
								HStack(spacing: 20) {
									ForEach(0..<30) {num in
										//cornerRadiusありの場合の書き方
										SecondCellView(num: num)
											.foregroundColor(Color.purple)
											.overlay(
												RoundedRectangle(cornerRadius: 50)
													.stroke(Color.purple, lineWidth: 1)
										)
									}
								}
							}.padding(.leading, 10)
							Spacer().frame(height: 30)
							
							//Thirdの部分のScrollView(画像を用いる)
							Text("Third")
								.font(.title)
								.bold()
								.frame(width: 340, height: 20, alignment: .leading)
							ScrollView(.horizontal) {
								HStack(spacing: 20) {
									ForEach(0..<30) {_ in
										ThirdCellView()
									}
								}
							}.padding(.leading, 10)
							
							Spacer().frame(height: 30)
							
							//同じような記述が続く場合はGroupで記述してあげればエラーは起きない
							Group {
								//以下縦スクロール用のサンプル
								Text("sample")
									.font(.title)
									.bold()
									.frame(width: 340, height: 20, alignment: .leading)
								ScrollView(.horizontal) {
									HStack(spacing: 20) {
										ForEach(0..<30) {_ in
											ThirdCellView()
										}
									}
								}.padding(.leading, 10)
								
								Text("sample")
									.font(.title)
									.bold()
									.frame(width: 340, height: 20, alignment: .leading)
								ScrollView(.horizontal) {
									HStack(spacing: 20) {
										ForEach(0..<30) {_ in
											ThirdCellView()
										}
									}
								}.padding(.leading, 10)
								
								
								Text("sample")
									.font(.title)
									.bold()
									.frame(width: 340, height: 20, alignment: .leading)
								ScrollView(.horizontal) {
									HStack(spacing: 20) {
										ForEach(0..<30) {_ in
											ThirdCellView()
										}
									}
								}.padding(.leading, 10)
							}
						}
					}
				}
			}
		}
	}
}


終わりに

内部勉強会向けなので、ここも説明したらいいよ!的なものがありましたらおいせていただけますと幸いです。
サンプルコードは以下を参照ください。
https://github.com/taitai9847/ScrollViewPractice

0
4
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
0
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?