Ios 将文本置于屏幕顶部和中心之间

Ios 将文本置于屏幕顶部和中心之间,ios,view,swiftui,Ios,View,Swiftui,是否有一种简单的方法将文本相对地放置在屏幕的顶部和中心之间?“简单”是指最好没有GeometryReader和公开计算 我尝试了VStack、Zstack和Spacer()的各种组合,但都没有效果 代码和屏幕截图如图所示: struct ContentView: View { var body: some View { Text("Between top and center") .offset(y: -150)

是否有一种简单的方法将文本相对地放置在屏幕的顶部和中心之间?“简单”是指最好没有
GeometryReader
和公开计算

我尝试了
VStack
Zstack
Spacer()
的各种组合,但都没有效果

代码和屏幕截图如图所示:

struct ContentView: View {
    var body: some View {
        Text("Between top and center")
            .offset(y: -150)
        Text("Center")
    }
}
以下是可能的解决方案(使用Xcode 12.1/iOS 14.1测试)

struct ContentView:View{
var body:一些观点{
VStack{
彩色。透明。覆盖(

Text(“在顶部和中心之间”)//这里是另一个使用VStack间隔方法的解决方案,我还使用了一些填充使您更接近中心

    import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack {
            Text("Top").bold()
                .foregroundColor(.blue)
            Spacer()
            Text("Your desired area")
            Spacer()
            Text("Middle Text").bold()
                .foregroundColor(.blue)
                .padding(.bottom, 200)
            Spacer()
                
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

一种可能的解决方案是在居中文本的每一侧创建两个视图(一个隐藏):


或者,为了避免错误(如果它们在将来的版本中更改了
文本(“”
的行为):

(如果需要,
文本(“在顶部和中心之间”)
可以提取为子视图,以避免代码重复。)


正如你所说:

Spacer()
[…]确保视图之间的空格大小相等

这正是我建议将
文本(“在顶部和中心之间”)
提取为子视图的原因。然后,您只能在一个位置更改视图的字体、大小等

适应的解决方案是:

struct ContentView: View {
    var body: some View {
        ZStack {
            VStack {
                Spacer()
                subview
                Spacer()
                Spacer()
                subview
                    .opacity(0)
                Spacer()
            }
            VStack {
                Spacer()
                Text("Center")
                Spacer()
            }
        }
    }

    var subview: some View {
        Text("Between top and center")
            .font(.caption)
            // apply all other modifiers if you want
    }
}

谢谢,这很有效!不要吹毛求疵,但这是一种同样简单的方法来实现这一点,而不使用颜色元素?可能是使用
框架
?谢谢,但我不能硬编码任何填充。它需要相对中心和顶部与中心之间的相对位置。我的缺点-这不起作用。我以前已经尝试过类似的方法。问题是m是
Spacer()
的作用很大程度上取决于视图(字体)的大小。它所做的只是确保视图之间的空格大小相等。它实际上并不能确保中间的文本保持在中间。@Daan如果您使两个视图都使用相同的字体(包括隐藏的字体),它会起作用。这就是问题所在:我对中间文本以及顶部和中间文本使用了不同的字体大小,而且大小也会动态变化。因此相对位置不应该取决于字体大小。@Daan我明白了-请检查更新的答案。谢谢。这不太有效,但您可以通过替换f中的第二个
子视图来修复它irst
VStack
通过一个
Spacer()
struct ContentView: View {
    var body: some View {
        VStack {
            Spacer()
            Text("Between top and center")
            Spacer()
            Text("Center")
            Spacer()
            Text("")
            Spacer()
        }
    }
}
struct ContentView: View {
    var body: some View {
        VStack {
            Spacer()
            Text("Between top and center")
            Spacer()
            Text("Center")
            Spacer()
            Text("Between top and center")
                .opacity(0)
            Spacer()
        }
    }
}
struct ContentView: View {
    var body: some View {
        ZStack {
            VStack {
                Spacer()
                subview
                Spacer()
                Spacer()
                subview
                    .opacity(0)
                Spacer()
            }
            VStack {
                Spacer()
                Text("Center")
                Spacer()
            }
        }
    }

    var subview: some View {
        Text("Between top and center")
            .font(.caption)
            // apply all other modifiers if you want
    }
}