标签: vstack

在 SwiftUI 中动态添加元素到 VStack

(Swift 5,SwiftUI)如果我有以下 VStack 代码:

struct ContentView: View {

var body: some View {

    ScrollView {
        VStack(alignment: .leading) {

                //Inside of VStack

        }.padding()
        .padding(.bottom, keyboard.currentHeight)
        .edgesIgnoringSafeArea(.bottom)
        .animation(.easeOut(duration: 0.16))
    }
}
}
Run Code Online (Sandbox Code Playgroud)

如何通过函数动态地将 Text() 添加到 VStack 并相应地更新 ScrollView 高度?

该函数(通过按下按钮调用):

func add() -> Void {
    //Adds a Text() element to the VStack. The content of the Text() is received from an API 
    //call, so it can't be hardcoded.
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种简单的方法来将 Text() 元素添加到我的 VStack 中。我在谷歌上广泛搜索了这个问题,但没有发现任何与这个小问题类似的东西。任何帮助,将不胜感激。

uiscrollview swift swiftui vstack

5
推荐指数
1
解决办法
6148
查看次数

SwiftUI:如何知道修饰符的正确顺序?

我对SwiftUI很陌生,第一次学习它,无法理解为什么下面的代码片段不起作用。理想情况下,VStack应向各个方向延伸,并且Image的宽度应为 200 像素,而不会丢失其纵横比。

\n

代码

\n
struct ContentView: View {\n    var body: some View {\n        VStack() {\n            Image("Image Name")\n                .resizable()\n                .frame(width: 200)\n                .aspectRatio(contentMode: .fit)\n        }\n        .background(Color.red)\n        .frame(maxWidth: .infinity,maxHeight: .infinity)\n    }\n}\n\n
Run Code Online (Sandbox Code Playgroud)\n

在我不小心重新排序了修改器之后后,它起作用了。那么,如果每次都没有点击和尝试方法,我该如何知道修饰符的正确顺序呢?

\n
// new VStack modifier order \n.frame(maxWidth: .infinity, maxHeight: .infinity)\n.background(Color.red)\n\n// new Image modifier order\n.resizable()\n.aspectRatio(contentMode: .fit)\n.frame(width: 200)\n
Run Code Online (Sandbox Code Playgroud)\n

xcode ios swift swiftui vstack

5
推荐指数
1
解决办法
1164
查看次数

Swift UI 设置使矩形变为正方形

在 SwiftUI 中,我有一个 VStack,里面有一个 Rectangle。矩形会自动填充父 VStack,这对宽度很好,但我想让高度等于宽度,所以它是方形的。如何将纵横比设置为 1:1 或设置高度 = 宽度?

VStack {
  Rectangle()
    .frame(height: ?? )  // I want to make the height equal to width so it's square
  Spacer()
Run Code Online (Sandbox Code Playgroud)

}

swift swiftui xcode11 vstack

4
推荐指数
1
解决办法
4039
查看次数

SwiftUI Zstack - 使元素忽略安全区域而另一个不

我有一个这样的 Zstack:

ZStack {
  Image("beach")
    .resizable()
    .edgesIgnoringSafeArea(.all)
    .scaledToFill()

  VStack {
    // with a lot of stuff
  }
}
Run Code Online (Sandbox Code Playgroud)

我希望图像忽略安全区域,但Vstack必须尊重安全区域。

该图像是应覆盖所有区域的背景图像。

我的这段代码也在VStack全屏显示,我不想要那样。

为什么一切都不尊重安全区域是个谜,因为相应的修饰符仅应用于图像。

swift swiftui vstack zstack

4
推荐指数
3
解决办法
792
查看次数

水平堆栈内的中心项目

如果水平堆栈中有 3 个项目,我想我可以这样做:

HStack{

      Text("test")

      Spacer()

      item2()

      Spacer()

      Text("test")
}
Run Code Online (Sandbox Code Playgroud)

将 item2() 置于两个文本视图之间的中心。然而,这样做的问题是 item2() 不一定总是居中,因为,可以说 Text("test") 更改为 Text("a") 或其他内容。这会导致问题,并且第二个项目并不总是位于屏幕中央。

我怎样才能使 item2() 始终居中?

谢谢

centering swift swiftui vstack hstack

3
推荐指数
1
解决办法
2538
查看次数

SwiftUI VStack 对齐错误?

我最近一直在 SwiftUI 中构建一个应用程序,今天我注意到 VStack Alignment 有一些奇怪的行为。无论我使用什么对齐方式,视图都不会在中心之外对齐。见下文:

VStack(alignment: .trailing, spacing: 0) {
    Text("Hello, World!")
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

VStack(alignment: .center, spacing: 0) {
    Text("Hello, World!")
}
Run Code Online (Sandbox Code Playgroud)

开关

它在预览和模拟器中都这样做,我试图将我的文本与屏幕的右边缘对齐。

完整代码:

import SwiftUI

struct DemoView: View {
    var body: some View {
        VStack(alignment: .center, spacing: 0) {
            Text("Hello, World!")
        }
    }
}

struct DemoView_Previews: PreviewProvider {
    static var previews: some View {
        DemoView()
    }

}
Run Code Online (Sandbox Code Playgroud)

alignment swift swiftui vstack

3
推荐指数
2
解决办法
317
查看次数

SwiftUI VStack 右对齐单个元素

我是 SwiftUI 的新手,这次我尝试将单个元素(图像)向右对齐,然后其余内容应居中对齐。

就像当你使用会发生什么Spacer()HStack,但在另一边。

我读到.alignmentGuide它有点令人困惑,但我尝试以这种方式使用它:

struct ContentView: View {
    var body: some View {
        VStack {
            HStack {
                Text("Hello!").alignmentGuide(.trailing) {
                    v in v[HorizontalAlignment.trailing]
                }
            }
            Text("Hello, World!")
            Spacer()
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
Run Code Online (Sandbox Code Playgroud)

但这根本没有改变,两者Text都是居中对齐的。

我试图移动.alignmentGuide后的代码}HStack结果相同。

这就是我想要做的,在使用情节提要之前,我会使用一些约束来做到这一点,例如将正确的约束设置为 8 或其他什么,但是当涉及到以 SwiftUI 方式进行操作时,我有点迷茫。

在此处输入图片说明

alignment ios swiftui vstack

3
推荐指数
2
解决办法
1854
查看次数

为什么 LazyHStack 在 SwiftUI 中采用全高,而 HStack 不采用全高?

为什么 LazyHStack 在高度方面的行为与 HStack 不同?(VStack 也一样)。

import SwiftUI

struct LazyTestView: View {

   var body: some View {

      LazyHStack {

         ForEach(1...10, id: \.self) { int in
            Text("\(int)")
         }

      }
   }
}

struct LazyTestView_Previews: PreviewProvider {

    static var previews: some View {
        LazyTestView()
            .previewLayout(.sizeThatFits)
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

而使用 HStack 时:

import SwiftUI

struct LazyTestView: View {
   var body: some View {
      HStack {
         ForEach(1...10, id: \.self) { int in
            Text("\(int)")
         }
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

.fixedSize()一种解决方案是为 LazyHStack添加...

PS:Xcode版本12.5测试版(12E5220o)

swiftui vstack hstack

3
推荐指数
1
解决办法
1789
查看次数

将 UIStackView 的 .fill 与 SwiftUI VStack 对齐

我有一个VStack带 3Text的。每个都有不同长度的字符串。我希望 的VStack宽度足够大以适合最宽的Text,但我也希望所有三个Texts 水平填充 VStack 。

默认情况下,使用以下代码:

VStack(spacing: 4.0) {
    ForEach(1..<4) {
        Text(Array<String>(repeating: "word", count: $0).joined(separator: " "))
            .background(Color.gray)
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到:

具有三种不同宽度文本的 VStack

我想:

具有三个相同宽度文本的 VStack

在 UIKit 中,我可以使用属性设置为 的UIStackView垂直线来执行此操作。没有对齐。我见过的建议解决方案是使用for修改堆栈视图的每个子视图(即每个)的框架。alignment.fillVStack.fillText.infinitymaxWidth

我发现的建议是修改Texts .frame(maxWidth: .infinity)。然而,这使得整体VStack扩展至(大概)其最大尺寸:

宽VStack

有没有办法让VStack自然生长到其最宽子级的大小,而不是更大,同时使其所有子级宽度相同?

ios swift swiftui vstack

3
推荐指数
1
解决办法
764
查看次数

将文本固定到滚动视图 SwiftUI 的底部

如何将视图元素固定到 SwiftUI 中滚动视图/VStack 的底部?我尝试过使用垫片,但这似乎不起作用。我需要将“页脚”文本放置在滚动视图/Vstack 的底部,我该怎么做?

struct ContentView: View {
    var body: some View {
        VStack {
            ScrollView(.vertical, showsIndicators: false) {
                VStack(alignment: .leading) {
                    Text("Top Title")
                    Text("Body")
                    Spacer()
                    Text("Footer") // SHOULD BE PINNED TO BOTTOM OF SCROLL VIEW
                        .frame(alignment: .bottom)
                }
            }
            .background(Color.red)

            Button("Done") {
                //some action
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

scrollview swift swiftui vstack

2
推荐指数
1
解决办法
3953
查看次数

标签 统计

swiftui ×10

vstack ×10

swift ×8

ios ×3

alignment ×2

hstack ×2

centering ×1

scrollview ×1

uiscrollview ×1

xcode ×1

xcode11 ×1

zstack ×1