标签: vstack

SwiftUI:使用 Spacers 在一个 VStack 中均匀分布多个 VStack

我正在尝试构建一个包含多个 VStack(元素)的 VStack(容器),每个 VStack 都有一个标题和一个文本。元素 VStack 应均匀分布,并在其间有间隔。

由于某种原因,它最多只能工作 4 个元素 VStack,如果我增加,则会出现错误

Failed to build ContentView.swift
Ambiguous reference to member 'buildingBlock()'
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

import SwiftUI

struct ContentView: View {
    var body: some View {

        VStack {
            Spacer()
            VStack {
                Text("Title 1")
                Text("Text 1")
            }
            Spacer()
            VStack {
                Text("Title 2")
                Text("Text 2")
            }
            Spacer()
            VStack {
                Text("Title 3")
                Text("Text 3")
            }
            Spacer()
            VStack {
                Text("Title 4")
                Text("Text 4")
            }
            Spacer()
            VStack {
                Text("Title 5")
                Text("Text 5")
            }
            Spacer()
            VStack {
                Text("Title 6")
                Text("Text …
Run Code Online (Sandbox Code Playgroud)

ios swiftui vstack

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

SwiftUI:将按钮放置在列表下方

我的一个视图有一个 grouped List,我喜欢在最后一行下方放置一个按钮。这是代码:

var body: some View {
    VStack() {
        List {
           Text("Hello World")
           Text("Hello World")
           Text("Hello World")
           Text("Hello World")
        }
        .listStyle(GroupedListStyle())

        Button("Button") {}
    }
    .navigationBarTitle("Hello World", displayMode: .inline)
}
Run Code Online (Sandbox Code Playgroud)

问题:该按钮始终显示在屏幕底部。我尝试添加间隔符,向 中添加间距修饰符VStack,但按钮始终位于底部:

在此输入图像描述

相反,我希望按钮位于列表下方并留有一定的间距。

我怎样才能做到这一点?

spacing swift swiftui vstack

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

SwitUI - 列表中的两个导航链接

我的列表单元格中有两个 NavigationLink

我想在点击一次时转到目的地 1,在点击两次时转到目的地 2。所以我添加了两个点击手势来控制导航。

但是当我点击时,有两个问题:

  • 1 不会调用点击手势块。
  • 2 即使两个导航链接位于 TextView 后面,它们也会自动激活。真正的效果是:点击单元格 -> 前往 Destination1 -> 返回首页 -> 前往 Destination2 -> 返回首页

这是我的代码:

struct MultiNavLink: View {
    @State var mb_isActive1 = false;
    @State var mb_isActive2 = false;
    
    var body: some View {
        return
            NavigationView {
                List {
                    ZStack {
                        NavigationLink("", destination: Text("Destination1"), isActive: $mb_isActive1)
                        NavigationLink("", destination: Text("Destination2"), isActive: $mb_isActive2)
                        Text("Single tap::go to destination1\nDouble tap,go to destination2")
                    }
                    .onTapGesture(count: 2, perform: {()->Void in
                        NSLog("Double tap::to destination2")
                        self.mb_isActive2 = true
                    }).onTapGesture(count: 1, …
Run Code Online (Sandbox Code Playgroud)

list ios swiftui vstack swiftui-navigationlink

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

如何在 SwiftUI 上的 VStack 上对齐多个项目的列?

在下面的示例中,如果我有一个VStackfollow 的 a HStack,如何使 follow 的宽度与gridHStack相同?

struct VStackAlignmentView: View {
    let data = ["a", "b", "cdefghl alalala", "i", "j"]
    var body: some View {
        VStack(spacing: 0) {
            ForEach (data, id:\.self) { item in
                HStack(alignment: .top) {
                    Text("Column 1")
                    VStack(alignment: .trailing) {
                        Text("Column \(item)")
                        Text("Value 2")
                    }
                    .frame(minWidth: 120)
                    Text("Column 3")
                    Spacer()
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的结果: 上面代码的结果 第三行的文本右对齐,但其他行添加了一个空格

我尝试过VStack(alignment: .trailing)通过添加一个Text具有框架宽度的空白来解决此问题,并且它有效,但我认为这不是一种优雅的方式。

我也尝试过使用alignmentGuide,但它把观点推向了其他方式。

有人有同样的问题吗?

alignment swiftui vstack hstack

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

在HStack中使两个按钮的高度和宽度相等

我有一个 VStack 和另一个 HStack,里面有按钮。即使我尝试设置按钮的固定宽度和高度,我也遇到了根据按钮内容缩小按钮的问题。

这是主屏幕:

import Foundation
import SwiftUI
import SwiftUINavigator

struct SurveyScreenView: View, IItemView {
    
    var listener: INavigationContainer?
    @State var survey: Survey
    @State var isUp = false
    @State var isDown = false
    
    @State var widthButton: CGFloat = 100
    @State var heightButton: CGFloat = 50
    
    var body: some View {
        NavigationView {
            VStack(alignment: .leading, spacing: 32) {
                Text(survey.title)
                    .font(.title)
                Text(survey.description)
                
                VoteView( survey: $survey, isUp: $isUp, isDown: $isDown)
                
                Spacer()
            }
            .navigationBarItems(leading:
                Button(action: {
                    listener?.pop()
                }, label: {
                    Text("Feed")
                })
            )
            .navigationBarTitle(Text("Survey")) …
Run Code Online (Sandbox Code Playgroud)

swift swiftui vstack hstack

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

SwiftUI:如何在VStack中删除视图之间的边距?

使用SwiftUI,我创建了一个VStack,其中包含一些固定元素和一个list元素。原因是,用户仅应滚动固定元素下方的区域。现在,我看到第二个固定元素和列表之间有一个空格。我不知道这个空间是从哪里来的,并想摆脱它,但是不知道如何。该区域标记为红色。

struct DashboardView : View, CoreDataInjected {

    var body: some View {
        GeometryReader { geometry in
            VStack {
                ScopeSelectorView().frame(maxWidth: .infinity).background(ColorPalette.gray)
                BalanceNumberView().frame(maxWidth: .infinity)
                List {
                    DashboardNavigationView(
                        height: geometry.size.height - ScopeSelectorView.height - BalanceNumberView.height
                    ).frame(maxWidth: .infinity).listRowInsets(.zero)
                }
            }
        }.background(Color.red).edgesIgnoringSafeArea(.all)
    }
}
Run Code Online (Sandbox Code Playgroud)

视图的屏幕截图

swiftui vstack

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

使用 SwiftUI 在 Apple Watch 上列出项目的背景

我正在致力于在 SwiftUI 中构建 Apple Watch 屏幕。布局工作得很好,但颜色样式的某些方面我似乎无法弄清楚。这是我的代码:

struct Watch3ThingsMainUI: View {
    var goals: [Goal]

    var body: some View {

        VStack {
            Text("3things")
                .foregroundColor(Color("3thingsBlue"))

            List(goals) { goal in
                HStack {
                    Text(goal.name)

                    Spacer()

                    Image(systemName: "gear")
                }
                .background(Color.blue)
            }
            .background(Color.green)
            .foregroundColor(Color.red)
            .accentColor(Color.yellow)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是它的渲染方式的截图:

示例屏幕截图

您会注意到,HStack 的蓝色背景仅覆盖了一个矩形区域,而不是列表似乎自动创建的整个按钮。奇怪的是,虽然列表支持背景修改器,但它似乎被忽略了——没有任何颜色是绿色的。

我希望能够确定整个按钮的背景,但我想不出一种方法来做到这一点——无论我尝试什么恶作剧,它在 HStack 周围仍然顽固地保持深灰色。

apple-watch swiftui vstack

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

SwiftUI 网格布局

我正在尝试使用 SwiftUI 实现以下网格布局,但不太确定最佳方法。

在此处输入图片说明

我的代码在下面,它并没有完全得到我想要的东西,而且有很多嵌套堆栈似乎也很糟糕

VStack {
            
            VStack {
                
                HStack {
                    
                    VStack {
                        
                        Text("Text Here")
                        Text("336.851")
                        
                    }
                    .padding(20)
                    .background(ColorManager.orange)
                    .cornerRadius(10)
                    
                    VStack {
                        
                        Text("Text Here")
                        Text("336.851")
                        
                    }
                    .padding(20)
                    .background(ColorManager.red)
                    .cornerRadius(10)
                    
                }
                
                HStack {
                    
                    VStack {
                        
                        Text("Text Here")
                        Text("336.851")
                        
                    }
                    .padding(20)
                    .background(ColorManager.green)
                    .cornerRadius(10)
                    
                    VStack {

                        Text("Text Here")
                        Text("336.851")

                    }
                    .padding(20)
                    .background(ColorManager.blue)
                    .cornerRadius(10)

                    VStack {

                        Text("Text Here")
                        Text("336.851")

                    }
                    .padding(20)
                    .background(ColorManager.purpleLight)
                    .cornerRadius(10)
                    
                }
                
                
            }
            
        }
Run Code Online (Sandbox Code Playgroud)

我的代码给出了以下结果,我只是不确定如何将框最大化跨越屏幕的一半和三分之一。另外,我对嵌套堆栈采取的方法是否正确?

在此处输入图片说明

swift swiftui vstack hstack

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

视图以超级视图为中心,视图位于 SwiftUI 的顶部

我试图在 UIKit 中实现一些非常简单的事情 - 一个视图始终位于中心(图像),第二个视图(文本)位于其顶部,两个视图之间有一定的间距。我尝试了许多不同的方法(主要是使用alignmentGuide但没有任何效果如我所愿)。

代码:

ZStack {
    Rectangle()
        .foregroundColor(Color.red)
    
    VStack {
        Text("Test")
            .padding([.bottom], 20) // I want to define spacing between two views
        
        Image(systemName: "circle")
            .resizable()
            .alignmentGuide(VerticalAlignment.center, computeValue: { value in
                value[VerticalAlignment.center] + value.height
            })
            .frame(width: 20, height: 20)
    }
}
.frame(width: 100, height: 100)
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述

正如您所看到的,图像并不完全居中,它实际上取决于Text. 有没有办法强制垂直和水平对齐在超级视图和布局第二个视图中居中而不影响居中视图?

ios swiftui vstack

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

SwiftUI - 标签未向左对齐

我在 SwiftUI 中有一个非常基本的视图,其中有一个标签,我正在努力让它向左对齐。这就是它的本质:

VStack(alignment: .leading) {
  Label("Hi", ...)
}
.frame(maxWidth: .infinity)
Run Code Online (Sandbox Code Playgroud)

无论我尝试什么,标签都会保留在视图的中心。我怎样才能解决这个问题?

label swiftui vstack

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

SwiftUI 中 VStack 的领先优势

我想创建一个包含许多TextVStack,每个 Text 之间的间距为 20 个点。我希望我的VStack与屏幕左侧(或父View 的前导侧)对齐。

ios swift swiftui vstack

0
推荐指数
1
解决办法
1016
查看次数