Implementing ScrollView & List

Published by @SoNiceInfo at 6/25/2020


Use ScrollView and List to implement scrolling.

ScrollView

When you call ScrollView, you specify the scrolling direction, visibility of the scrollbar and its content.
For horizontal scrolling, use .horizontal and struct the contents with HStack.
For vertical scrolling, use .vertical and struct the contents with VStack.

In this example, EmojiTile views are structed in HStack so that it can be scrolled by ScrollView.
The demo shows the horizontal scrolling.

List

List, as the name implies, allows you to implement list-style scrolling.
As shown in the following code, you can list the data with passing the data.
The following will list animals with multiple animal information.
If the data conforms to the Identifiable protocol, SwiftUI can follow the movement of the list elements when they are added or removed.

struct Animal: Identifiable {
    var id: Int
    let name: String
}

List (animals) { animal in
    Text(animal.name)
}

This example uses Text directly for each list item。
The demo shows the scrolling of the list.

//
//  ContentView.swift
//

import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack () {
            Spacer()
            ScrollView(.horizontal, showsIndicators: false) {
                HStack {
                    EmojiTile(text: "😀", color: .blue)
                    EmojiTile(text: "😉", color: .green)
                    EmojiTile(text: "😊", color: .purple)
                    EmojiTile(text: "😀", color: .blue)
                    EmojiTile(text: "😉", color: .green)
                    EmojiTile(text: "😊", color: .purple)
                    EmojiTile(text: "😀", color: .blue)
                    EmojiTile(text: "😉", color: .green)
                    EmojiTile(text: "😊", color: .purple)
                }
            }
            Spacer()
            List() {
                Text("Hoge")
                Text("Fuga")
            }
            Spacer()
        }
    }
}

struct EmojiTile: View {
    var text: String
    var color: Color
    
    var body: some View {
        Text(text)
            .font(.custom("Emoji", size: 50))
            .padding(50)
            .background(color)
            .cornerRadius(10)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

References

ScrollView - SwiftUI | Apple Developer Documentation
List - SwiftUI | Apple Developer Documentation

    I released iOS App!

    ToDo App

    Visualize Activity, Data sharing with iCloud, Dark mode supported.

    リリースしたToDoアプリのスクリーンショット

    IP Address bookmark.

    Check and bookamrk IP address of all interfaces with geolocation.

    リリースしたIPアドレス保存アプリのスクリーンショット