质疑SwiftUI中间隔器的动态性
我从多个地方听说间隔器是动态的/相对于不同的屏幕尺寸。我一直把它们作为我布局的重要组成部分,但它们让我失望。有人能告诉我我是否用错了吗?这是一个矩形的例子,矩形上有一个方格。由于矩形开始时很大,我还需要将其向下推到屏幕上,所以我使用了很多间隔符(这似乎是不必要的)。我试过使用填充物,但它并没有像我需要的那样向下推。在我提供的代码之后,您将看到两张图片。一款是iPodtouch(第7代),另一款是iPhone12Pro Max。所有设备的布局都不匹配。我的目标是让这两款设备都具有iPod touch的布局质疑SwiftUI中间隔器的动态性,swiftui,Swiftui,我从多个地方听说间隔器是动态的/相对于不同的屏幕尺寸。我一直把它们作为我布局的重要组成部分,但它们让我失望。有人能告诉我我是否用错了吗?这是一个矩形的例子,矩形上有一个方格。由于矩形开始时很大,我还需要将其向下推到屏幕上,所以我使用了很多间隔符(这似乎是不必要的)。我试过使用填充物,但它并没有像我需要的那样向下推。在我提供的代码之后,您将看到两张图片。一款是iPodtouch(第7代),另一款是iPhone12Pro Max。所有设备的布局都不匹配。我的目标是让这两款设备都具有iPod touc
ZStack {
VStack {
ForEach(1..<38) { _ in
Spacer()
}
Rectangle()
.fill(Color.blue)
}
VStack {
Spacer()
Spacer()
HStack {
Rectangle()
.scaledToFit()
Rectangle()
.scaledToFit()
Rectangle()
.scaledToFit()
Rectangle()
.scaledToFit()
Rectangle()
.scaledToFit()
}
Spacer()
}
}
ZStack{
VStack{
ForEach(1..您不应该需要多个Spacer()
GeometryReader{geometry中的几何体
VStack{
垫片()
VStack{
HStack{
ForEach(0..您不应该需要多个Spacer()
GeometryReader{geometry中的几何体
VStack{
垫片()
VStack{
HStack{
ForEach(0..您的问题并不清楚您希望布局是什么样子。因此,此代码基于我对您的问题的推测,我不太理解
导入快捷界面
结构布局视图:视图{
var body:一些观点{
ZStack{
VStack{
矩形().填充(颜色.白色)
ZStack{
矩形().填充(颜色.蓝色)
VStack{
HStack{
矩形()
矩形()
矩形()
矩形()
矩形()
}
.偏移量(x:0,y:50)
垫片()
}
}
}
}
}
}
结构布局视图\u预览:预览提供程序{
静态var预览:一些视图{
布局视图()
.previewDevice(.some(.init(原始值:“iPhone 12 Pro Max”))
布局视图()
.previewDevice(.some(.init(原始值:“iPod touch(第七代)”))
}
}
您的问题并不清楚您希望布局是什么样的。因此,此代码基于我对您的问题的推测,我不太理解
导入快捷界面
结构布局视图:视图{
var body:一些观点{
ZStack{
VStack{
矩形().填充(颜色.白色)
ZStack{
矩形().填充(颜色.蓝色)
VStack{
HStack{
矩形()
矩形()
矩形()
矩形()
矩形()
}
.偏移量(x:0,y:50)
垫片()
}
}
}
}
}
}
结构布局视图\u预览:预览提供程序{
静态var预览:一些视图{
布局视图()
.previewDevice(.some(.init(原始值:“iPhone 12 Pro Max”))
布局视图()
.previewDevice(.some(.init(原始值:“iPod touch(第七代)”))
}
}
谢谢你的回答,我将正确地标记这个问题,因为这是第一个给出的问题,我喜欢它使用的方法,但这两个问题都达到了预期的效果。但我也想知道为什么我使用的不起作用。我只使用了与屏幕大小相关的间隔符,所以看起来会是这样。你有没有你知道为什么没有吗?当我说“往那边走”我的意思是为什么它在两个屏幕上没有相同的结果。@Chr0mePl8edSt0vePipe您在ZStack
中有两个VStack
重叠在一起,并且有不同的布局,在不同的屏幕大小上也可能不同。间隔符
会根据屏幕大小来腾出空间。好的,谢谢,我想我现在明白了。谢谢对于答案,我要把这个问题标记正确,因为这是第一个给出的问题,我喜欢它使用的方法,但这两个问题都达到了预期的效果。但我也想知道为什么我使用的不起作用。我只使用了与屏幕大小相关的间隔符,所以看起来会是这样。你知道为什么吗不是吗?当我说“往那边走”我的意思是为什么它在两个屏幕上没有相同的结果。@Chr0mePl8edSt0vePipe您在ZStack
中有两个VStack
重叠在一起,并且有不同的布局,在不同的屏幕大小上也可能不同。间隔符
会根据屏幕大小来腾出空间。好的,谢谢,我想我现在明白了。谢谢对于答案。我将上面的答案标记为正确,因为两个答案都达到了预期目标(抱歉,没有说得太清楚),并且因为另一个答案是先给出的,我只是更喜欢上面的代码。我还认为@andykkt的答案更好。。padding(.vertical)
可能更有用。谢谢你的回答。我把上面的答案标对了,因为两个答案都达到了预期的目标(很抱歉没有说得太清楚),而且另一个答案是先给出的,我只是更喜欢上面的代码。我也认为@andykkt的答案更好。.padding(.vertical)
可能更有用。
GeometryReader { geometry in
VStack {
Spacer()
VStack {
HStack {
ForEach(0..<5) {_ in
Rectangle()
.scaledToFit()
}
}
.padding(.vertical)
Spacer()
}
.background(Color.blue)
.frame(height: geometry.size.height * 0.4)
}
}