98 - Understanding GeometryReader in SwiftUI

GeometryReader is a powerful tool in SwiftUI that allows us to access and manipulate the size and position of a view. It is especially useful when we need to create custom layouts or animations.

To use GeometryReader, you simply wrap your view in it. Inside the closure, you can access a geometry proxy that provides information about the size and position of the view.

Here’s an example:

struct ContentView: View {
  var body: some View {
    GeometryReader { geometry in
      VStack {
        ForEach(0..<10) { i in
          Rectangle()
            .fill(.blue)
            .frame(
              width: geometry.size.width * CGFloat(i+1)/10,
              height: geometry.size.height/10
            )
        }
      }
    }
  }
}

Your preview should look like this:

SwiftUI's GeometryReader lets you scale enclosed views in relation to available space.

In this example, you use GeometryReader to create a VStack of 10 rectangles. The width of each rectangle is proportional to its position in the stack — the first rectangle takes up 10% of the width, the second 20% and so on up to 100%. This kind of dynamic, responsive layout is made possible thanks to the insights provided by GeometryReader.

All this makes for a fun exploration of GeometryReader, illustrating how it provides dynamic information about the view’s environment, and how you can use this to influence your layout and animations.