Search code examples
iosviewpositionswiftui

How To Position Views Relative To Their Top Left Corner In SwiftUI


How do I position views relative to their top left corner in swiftUI? The "position" modifier moves the views relative to their center coordinates. So .position(x: 0, y: 0) places a views center coordinate in the top left of the screen.

I want to place a views top left coordinate in the top left of the screen, How do I do this?

struct HomeView: View {
    var body: some View {
        VStack(alignment: .leading) {
            Text("Top Text")
                .font(.system(size: 20))
                .fontWeight(.medium)
             Text("Bottom Text")
                .font(.system(size: 12))
                .fontWeight(.regular)
        }
        .position(x: 0, y: 0)
    }
}

Currently, the left half of my view is cut off the screen, how do I prevent this? Also, how do I align relative to the safe area?

I miss UIKit 😪

enter image description here


Solution

  • @Asperi 's answer will solve the problem. But, I think we should use Spacer() rather than Color.clear and ZStack.

    Spacer is specifically designed for these scenarios and makes the code easier to understand.

    struct HomeView: View {
        var body: some View {
            HStack {
                VStack(alignment: .leading) {
                    Text("Top Text")
                        .font(.system(size: 20))
                        .fontWeight(.medium)
    
                    Text("Bottom Text")
                        .font(.system(size: 12))
                        .fontWeight(.regular)
                    Spacer()
                }
                Spacer()
            }
        }
    }
    

    SwiftUI layout system is different from UIKit.

    It asks each child view to calculate its own size based on the bounds of its parent view. Next, asks each parent to position its children within its own bounds.

    https://www.hackingwithswift.com/books/ios-swiftui/how-layout-works-in-swiftui