Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
405 views
in Technique[技术] by (71.8m points)

swiftui - How to absolutely position a child view globally

How do I absolutely position a child view within the main window?

position(x:y:) and offset(x:y:) are relative to the parent.

The best I got to was to use GeometryReader and calculate the position/offset, for example, to position the circle at the bottom of the screen:

GeometryReader { geo in
  Circle()
    .foregroundColor(.red)
    .frame(width: 100, height: 100)
    .offset(x: 0, y: UIScreen.main.bounds.size.height - geo.frame(in: .global).maxY)
}

But it's problematic. GeometryReader distorts the layout and the result would change depending on the parent of Circle.

Is there a well established way to position Circle, say in the middle of the width of the screen and 10% (or fixed amount) off of the bottom of the screen?

EDIT: here's an example of what I'm trying to achieve:

struct InnerView: View {
    var body: some View {
        Circle()
            .foregroundColor(.green)
            .frame(width: 100, height: 100)
    }
}

struct ContentView: View {
    
    var body: some View {
        LazyVGrid(columns: [.init(),.init()], content: {
            InnerView()
            InnerView()
            InnerView()
        })
    }
}

Can one of the InnerViews render their circle relative in the mid-bottom area of the window?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
等待大神答复

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...