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

前端 未结 2 1628
被撕碎了的回忆
被撕碎了的回忆 2021-01-21 21:10

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:

相关标签:
2条回答
  • 2021-01-21 21:44

    @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

    0 讨论(0)
  • 2021-01-21 21:51

    If I correctly understand your goal the .position is not appropriate instrument for it. SwiftUI layout works better without hardcoding.

    Here is possible solution. Tested with Xcode 11.4 / iOS 13.4

    struct HomeView: View {
        var body: some View {
            ZStack(alignment: .topLeading) {
                Color.clear
                VStack(alignment: .leading) {
                    Text("Top Text")
                        .font(.system(size: 20))
                        .fontWeight(.medium)
                     Text("Bottom Text")
                        .font(.system(size: 12))
                        .fontWeight(.regular)
                }
            }.frame(maxWidth: .infinity, maxHeight: .infinity)
        }
    }
    
    0 讨论(0)
提交回复
热议问题