SwiftUI 使用ScrollViewReader和DragGesture桥接UIKit

SwiftUI启动时,缺少的功能之一就是能够以编程方式控制ScrollViews 的偏移量:
在Xcode 12和iOS 14中,我们已经获得了ScrollViewReader,它恰好解决了这一缺点。

另一个缺少的功能是可能添加sectionIndexTitles到Lists:这是放置在表视图尾部的索引列表(例如A通过Z),用于快速跳转到特定部分。

在本文中,我们将使用ScrollViewReader和 DragGesture贯彻我们自己SectionIndexTitles:

  • 我们将使用和ScrollView一起使用ScrollViewReader(List本文末尾提供了一个示例)。
  • 虽然我们使用了ScrollView,但是我们仍然希望延迟加载UI元素,因此我们也将使用LazyVstack。
  • 最后,设备数据以字典的形式出现,其中键是节头,元素是节内容。
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,以使代码更具可读性:

你可能感兴趣的:(SwiftUI 使用ScrollViewReader和DragGesture桥接UIKit)