blob: 1e014000ee4e06ec9e13a7eb24ca341e9e0788ee (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
//
// View+Size.swift
// MullvadVPN
//
// Created by Jon Petersson on 2024-11-14.
// Copyright © 2025 Mullvad VPN AB. All rights reserved.
//
import SwiftUI
extension View {
/// Measures view size.
func sizeOfView(_ onSizeChange: @escaping ((CGSize) -> Void)) -> some View {
return
self
.background {
GeometryReader { proxy in
Color.clear
.preference(key: ViewSizeKey.self, value: proxy.size)
.onPreferenceChange(ViewSizeKey.self) { size in
onSizeChange(size)
}
}
}
}
}
private struct ViewSizeKey: PreferenceKey, Sendable {
nonisolated(unsafe) static var defaultValue: CGSize = .zero
static func reduce(value: inout CGSize, nextValue: () -> CGSize) {
value = nextValue()
}
}
|