SwiftUI啟動時,缺少的功能之一就是能夠以編程方式控制ScrollViews 的偏移量:
在Xcode 12和iOS 14中而叼,我們已經獲得了ScrollViewReader,它恰好解決了這一缺點舍败。
另一個缺少的功能是可能添加sectionIndexTitles到Lists:這是放置在表視圖尾部的索引列表(例如A通過Z)科盛,用于快速跳轉到特定部分。
在本文中伤哺,我們將使用ScrollViewReader和 DragGesture貫徹我們自己SectionIndexTitles:
- 我們將使用和ScrollView一起使用ScrollViewReader(List本文末尾提供了一個示例)。
- 雖然我們使用了ScrollView者祖,但是我們仍然希望延遲加載UI元素立莉,因此我們也將使用LazyVstack。
- 最后七问,設備數據以字典的形式出現蜓耻,其中鍵是節(jié)頭,元素是節(jié)內容械巡。
struct ContentView: View {
let devices: [String: [String]]
var body: some View {
ScrollView {
LazyVStack {
devicesList
}
}
.navigationBarTitle("Apple Devices")
}
var devicesList: some View {
ForEach(devices.sorted(by: { (lhs, rhs) -> Bool in
lhs.key < rhs.key
}), id: \.key) { categoryName, devicesArray in
Section(
header: HeaderView(title: categoryName)
) {
ForEach(devicesArray, id: \.self) { deviceName in
RowView(text: deviceName)
}
}
}
}
}
在這里刹淌,我還將介紹幾個輔助視圖RowView和HeaderView,以使代碼更具可讀性: