ๅๅ็บ๏ผ .readSize()๏ผไฝๅ ็บๆญคๆนๆณ็ onChange
closure ๆฏๅจ frame size ๆๆน่ฎๆๆๆ่งธ็ผ๏ผไนๅฐฑๆฏ size ๆฒๆน่ฎๆ๏ผไธๆๆไปปไฝๅๆ๏ผๅ ๆญคไนไธๆ็็ๅปๅท่ก "read size" ็ๅไฝ๏ผๆไปฅๆนๅ็บ .onChangeSize() ๆ็ฌฆๅ็จๅผ็ๅๆ๏ผไนๆไธๆ่ชค็จใ
// 2022.02.15 (*) original name: `readSize`
// 2022.02.18 (r) renamed `onChangeSize`
extension View {
/// get parent's offered size.
/// ```
/// view.onChangeSize { size in ... }
/// ```
func onChangeSize(onChange: @escaping (CGSize) -> Void) -> some View {
background( GeometryReader { geo in
Color.clear.preference(key: SizePreferenceKey.self, value: geo.size)
}).onPreferenceChange(SizePreferenceKey.self, perform: onChange)
}
}
private struct SizePreferenceKey: PreferenceKey {
static var defaultValue: CGSize = .zero
static func reduce(value: inout CGSize, nextValue: () -> CGSize) {}
}