Here's a tip if you wish to show the sizes of views in your SwiftUI previews. Add the following struct to your project.
struct ViewSizePreferenceReader: View {
private struct ViewSizePreferenceKey: PreferenceKey {
typealias Value = [CGSize]static var defaultValue: [CGSize] = []
static func reduce(value: inout [CGSize], nextValue: () -> [CGSize]) {
value.append(contentsOf: nextValue())
}
}@Binding var sizeString: String
var body: some View {
GeometryReader { (geometry: GeometryProxy) in
Color.clear
.preference(key: ViewSizePreferenceKey.self, value: [geometry.size])
}
.onPreferenceChange(ViewSizePreferenceKey.self) { preferences in
if let size = preferences.first {
self.sizeString = String(format: "%.1f x %.1f", size.width, size.height)
}
}
}
}Then add a @State variable for the string, and use the above view as a background, as follows. The preview below will show how the Dynamic Type setting influences SF Symbol based images.
struct ContentView: View {
@State private var sizeString = "0x0" var body: some View {
VStack {
Image(systemName: "magnifyingglass")
.imageScale(.large)
.background(ViewSizePreferenceReader(sizeString: self.$sizeString))
Text("Size of button: \(self.sizeString)")
}
}
} struct ContentView_Previews: PreviewProvider {
static var previews: some View {
Group {
ContentView() ContentView()
.environment(\.sizeCategory,
.accessibilityLarge)
}
.previewLayout(.fixed(width: 414, height: 200))
}
}