【SwifUI】List とScrollViewについて
・ListとScrollViewの違い
Listの場合は、画面がスクロールして表示される際に表示範囲分だけインスタンスが生成されますが、
ScrollViewの場合は、表示するまで待機はせず、すぐにインスタンスを生成されます。
ScrollViewを利用する場合は、、ios14からLasyVStack、もしくはLazyHStackと併用すると
画面に表示される分だけ順次ロードしてくれるようです。
コード例を下記に記載します。
・コード例
・List
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
struct GroupMenber: Identifiable { | |
let id = UUID() | |
let name: String | |
} | |
struct ContentView: View { | |
var groupMenbers: [GroupMenber] = [] | |
init() { | |
groupMenbers.append(GroupMenber(name: "Sasaki")) | |
groupMenbers.append(GroupMenber(name: "Ikeda")) | |
groupMenbers.append(GroupMenber(name: "Shimamura")) | |
groupMenbers.append(GroupMenber(name: "Kobayashi")) | |
} | |
var body: some View { | |
Form{ | |
List { | |
ForEach(groupMenbers) { member in | |
Text(member.name) | |
} | |
} | |
} | |
} | |
} |
・LazyVStackとScrollView
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
struct GroupMenber: Identifiable { | |
let id = UUID() | |
let name: String | |
} | |
struct ContentView: View { | |
var groupMenbers: [GroupMenber] = [] | |
init() { | |
groupMenbers.append(GroupMenber(name: "Sasaki")) | |
groupMenbers.append(GroupMenber(name: "Ikeda")) | |
groupMenbers.append(GroupMenber(name: "Shimamura")) | |
groupMenbers.append(GroupMenber(name: "Kobayashi")) | |
} | |
var body: some View { | |
Form{ | |
ScrollView { | |
LazyVStack(alignment:.leading) { | |
ForEach(groupMenbers) { member in | |
Text(member.name) | |
Divider() | |
} | |
} | |
} | |
} | |
} | |
} |