当前位置: 首页 > 知识库问答 >
问题:

如何在SwiftUI中将项目对齐到VStack中的顶部?

姜兴业
2023-03-14
VStack(alignment: .leading) {
        Image(item.imageUrl)
              .resizable()
              .aspectRatio(contentMode: .fit)
              .frame(width: 72, height: 72, alignment: .top).padding(.top,0)
        Text("\(item.name)").font(Font.system(size:12, design: .default))
             .multilineTextAlignment(.center)
             .frame(maxWidth: .infinity).lineLimit(2)    
        }
}

我可以看到VStack接受param对齐,但它是水平对齐。我需要的是,图像应该坚持到它的超级视图的顶部。有没有一种方法可以做到这一点,而不使用Spacer()。

像在react-native中一样,我们曾经有justifyContent和alignItems用于儿童的水平和垂直对齐。

更新:

 VStack(alignment: .leading, spacing: 0) {
        Text("line 1")
        Text("line 2")
 }

struct MyCustomView:View {
  var body: some View {
    VStack(alignment: .leading, spacing: 0) {
      Text("line 1")
      Text("line 2")
      Spacer()
    }
 }

但是在复杂的视图中,间隔器会产生问题,假设另一个开发人员想在我的视图下面添加一个自定义视图(在本例中是第3行),间隔器会在两者之间创建额外的空间

VStack {
     MyCustomView()
     Text("line 3")
 }

有没有更好的方法让我的子视图(和后续视图)在VStack中保持与顶部对齐而不使用间隔?

共有1个答案

巫马嘉祯
2023-03-14

您可以尝试使用.frame()修饰符使vstack()在它的超级视图中具有完整的大小。在框架中,您可以对齐内容topleding

var body: some View {
    VStack(alignment: .leading, spacing: 0) {
        Text("line 1")
        Text("line 2")
    }
    .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .topLeading)
    .border(Color.red)
}

该解决方案不需要间隔物

 类似资料:
  • 本文向大家介绍将项目对齐到中心,在SAPUI5中不起作用,包括了将项目对齐到中心,在SAPUI5中不起作用的使用技巧和注意事项,需要的朋友参考一下 如果您想要一个快速的解决方案,则可以使用基本的CSS属性(如用于左右对齐的填充)来对齐内容。使用相对百分比,这样它就可以在两个视图中使用。 看起来理想的其他方法是定义自定义CSS。然后,您需要添加此自定义CSS来显示。 将相关属性设置为Margin:0

  • 问题内容: 如何将下面的所有内容对齐到最右边? 问题答案: 在渲染HTML表格。您基本上希望将其应用于所呈现的每个元素。使用当前代码,最简单的方法是应用以下代码: 当然,您也可以更加具体,例如,给出自己的规则并在CSS中定义一个规则(该规则将直接应用于呈现的HTML 元素)。 与 您还可以通过属性为每个元素提供自己的类,该属性接受逗号分隔的CSS类名字符串,这些字符串将重复应用于这些元素。如果要对

  • 问题内容: 给定此代码: 导致这种交互: 即使标签/文本组件不需要整个宽度,如何填充屏幕的宽度? 我发现的一个窍门是在结构中插入一个 空 ,如下所示: 产生所需的设计: 有没有更好的办法? 问题答案: 尝试将.frame修饰符与以下选项一起使用: 这被描述为是一个灵活的框架(请参阅文档),它将伸展以填充整个屏幕,并且当它有多余的空间时,它将使其内容居中。

  • https://jsfidle.net/vhem8scs/ 是否可以用FlexBox将两个项目左对齐,一个项目右对齐?链接更清楚地表明了这一点。最后一个例子是我想要实现的。 在flexbox中,我有一个代码块。对于float,我有四个代码块。这是我更喜欢FlexBox的一个原因。 HTML CSS

  • 问题内容: 我有一个具有以下属性的flex容器(蓝色正方形): 因此,其子项(浅蓝色方块)如下所示排列它们自己。但是,我想从正常流程中添加另一个孩子(绿色正方形)并将其相对于其父对象放置。要将其定位在下面,如您所见,我最好编写类似bottom: 20px;和的内容margin: auto;。 我试着z-index无济于事。我应该如何处理?我应该使用另一个父元素吗? 问题答案: 以下是实现此布局的五

  • 问题内容: 是否有比使用方法更灵活的“联系人”右对齐方式? http://jsfiddle.net/vqDK9/ 问题答案: 干得好。设置柔性容器上。