(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 中。我在谷歌上广泛搜索了这个问题,但没有发现任何与这个小问题类似的东西。任何帮助,将不胜感激。
我对SwiftUI很陌生,第一次学习它,无法理解为什么下面的代码片段不起作用。理想情况下,VStack应向各个方向延伸,并且Image的宽度应为 200 像素,而不会丢失其纵横比。
\nstruct 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\nRun 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)\nRun Code Online (Sandbox Code Playgroud)\n 在 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)
}
我有一个这样的 Zstack:
ZStack {
Image("beach")
.resizable()
.edgesIgnoringSafeArea(.all)
.scaledToFill()
VStack {
// with a lot of stuff
}
}
Run Code Online (Sandbox Code Playgroud)
我希望图像忽略安全区域,但Vstack必须尊重安全区域。
该图像是应覆盖所有区域的背景图像。
我的这段代码也在VStack全屏显示,我不想要那样。
为什么一切都不尊重安全区域是个谜,因为相应的修饰符仅应用于图像。
如果水平堆栈中有 3 个项目,我想我可以这样做:
HStack{
Text("test")
Spacer()
item2()
Spacer()
Text("test")
}
Run Code Online (Sandbox Code Playgroud)
将 item2() 置于两个文本视图之间的中心。然而,这样做的问题是 item2() 不一定总是居中,因为,可以说 Text("test") 更改为 Text("a") 或其他内容。这会导致问题,并且第二个项目并不总是位于屏幕中央。
我怎样才能使 item2() 始终居中?
谢谢
我最近一直在 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) 我是 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 方式进行操作时,我有点迷茫。
为什么 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)
我有一个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)
我得到:
我想:
在 UIKit 中,我可以使用属性设置为 的UIStackView垂直线来执行此操作。没有对齐。我见过的建议解决方案是使用for修改堆栈视图的每个子视图(即每个)的框架。alignment.fillVStack.fillText.infinitymaxWidth
我发现的建议是修改Texts .frame(maxWidth: .infinity)。然而,这使得整体VStack扩展至(大概)其最大尺寸:
有没有办法让VStack自然生长到其最宽子级的大小,而不是更大,同时使其所有子级宽度相同?
如何将视图元素固定到 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)