在SwiftUI中在Scrollview(替代列表)中使用VStack时的性能

时间:2019-06-09 11:54:02

标签: swift performance swiftui

使用内置的列表视图,无法删除单元格之间的行分隔符。在我的设计中,我需要在每行的右侧显示一个标签,有时甚至隐藏这些行。

目前,唯一的解决方法是在ScrollView中使用VStack。但是这样做的性能如何?在很长的ScrollView上这样做安全吗?由于SwiftUI使用数据结构而非UIView,我们实际上是否需要重用行为?

在视频会议(https://developer.apple.com/videos/play/wwdc2019/237/)中,他们还解释了SwiftUI的布局行为,无法想象当需要计算每个单元格的高度时,ScrollView中的VStack会很长。当然,他们可以实现某种布局缓存。

1 个答案:

答案 0 :(得分:0)

我偶然发现了一个类似的问题。发现使用Metal可能是保持性能的最佳解决方案。 .drawingGroup()准确地说。有关更多说明,请参见here。重要的是要记住,这会将视图转换为图像。因此像TextField这样的活动控件将不再起作用。可点击区域仍然像动画一样工作。

/// Composites this view's contents into an offscreen image before final
/// display.
///
/// Views backed by native platform views don't render into the image.
/// Instead, they log a warning and display a placeholder image to highlight
/// the error.
///
/// - Parameters:
///   - opaque: A Boolean value that indicates whether the image is opaque.
///     If `true`, the alpha channel of the image must be one.
///   - colorMode: The working color space and storage format of the image.
/// - Returns: A view that composites this view's contents into an offscreen
///   image before display.
public func drawingGroup(opaque: Bool = false, colorMode: ColorRenderingMode = .nonLinear) -> some View