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中的第二个子视图来修复它irstVStack
通过一个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
}
}