Untitled

 avatar
unknown
swift
7 hours ago
809 B
6
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...