SwiftUI FrameReader

具有 GeometryReader 部分功能的 SwiftUI 容器视图。

动机

GeometryReader 每次容器视图的几何属性发生变化时,都会重新计算其 body。 如果 body 仅依赖于容器视图几何信息的子集,这可能会导致不必要的重新计算。 例如,子视图可能依赖于父视图的大小,但不依赖于其位置。

此软件包提供了容器视图,每个视图都提供 GeometryReader 功能的子集。 这些容器视图具有与 GeometryReader 相同的空间填充行为,但仅在其返回值更改时才重新计算其 body。

开始使用

使用 SizeReaderSafeAreaReaderBoundsReader 读取容器视图的大小和/或安全区域。

SizeReader { size in
    /// content
}

使用 FrameReader 读取容器视图在给定坐标空间中的 frame。

FrameReader(in: .global) { frame in
    /// content
}

高级用法

为任何 reader 提供一个键路径,以从容器视图中读取单个几何值。

SizeReader(\.width) { width in
    /// content
}

FrameReader(\.minY, in: .global) { minY in
    /// content
}

使用 GeometryValueReader 计算并读取容器视图中的单个几何值。

GeometryValueReader { proxy in
    proxy.bounds(of: .scrollView)?.height
} content: { scrollViewHeight in
    /// content
}

要求

安装

联系方式

Twitter 上的 @ciaranrobrien