Untitled
unknown
swift
6 months ago
809 B
16
No Index
import SwiftUI
fileprivate struct SizeReader: ViewModifier {
var onChange: (CGSize) -> ()
func body(content: Content) -> some View {
if #available(iOS 16.0, *) {
content
.onGeometryChange(for: CGSize.self, of: { $0.size }, action: onChange)
} else {
content
.background(
GeometryReader { geometry in
Color.clear
.preference(key: SizePreferenceKey.self, value: geometry.size)
}
)
.onPreferenceChange(SizePreferenceKey.self, perform: onChange)
}
}
struct SizePreferenceKey: PreferenceKey {
static var defaultValue: CGSize = .zero
static func reduce(value: inout CGSize, nextValue: () -> CGSize) {}
}
}
extension View {
public func onSizeChange(perform action: @escaping (CGSize) -> ()) -> some View {
modifier(SizeReader(onChange: action))
}
}Editor is loading...