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)) } }