给定此代码:

import SwiftUI

struct ContentView: View {
  var body: some View {
    VStack(alignment: .leading) {
      Text("Title")
        .font(.title)

      Text("Content")
        .lineLimit(nil)
        .font(.body)

      Spacer()
    }
    .background(Color.red)
  }
}

#if DEBUG
struct ContentView_Previews : PreviewProvider {
  static var previews: some View {
    ContentView()
  }
}
#endif

它会导致此接口:

preview

即使标签/文本组件不需要全宽,如何让VStack填充屏幕宽度?


我发现的一个技巧是在 struct 中插入empty HStack,如下所示:

VStack(alignment: .leading) {
  HStack {
    Spacer()
  }
  Text("Title")
    .font(.title)

  Text("Content")
    .lineLimit(nil)
    .font(.body)

  Spacer()
}

从而产生所需的设计:

desired output

有更好的办法吗?

推荐答案

try 将.frame修改器与以下选项一起使用:

.frame(
      minWidth: 0,
      maxWidth: .infinity,
      minHeight: 0,
      maxHeight: .infinity,
      alignment: .topLeading
    )
struct ContentView: View {
  var body: some View {
    VStack(alignment: .leading) {
      Text("Hello World")
        .font(.title)
      Text("Another")
        .font(.body)
      Spacer()
    }
    .frame(
      minWidth: 0,
      maxWidth: .infinity,
      minHeight: 0,
      maxHeight: .infinity,
      alignment: .topLeading
    )
    .background(Color.red)
  }
}

这被描述为一个灵活的框架(see the documentation),它将拉伸以充满整个屏幕,并且当它有额外的空间时,它将使其内容在其内部居中.

Ios相关问答推荐

Xcode15.3上的生成错误:调用的对象类型';facebook::flipper::SocketCertificateProvider';不是函数或函数指针

在Swift5中,将某些属性值从一个类复制到另一个类实例

在Android和iOS上从后台恢复应用程序后,inappwebview上出现白屏?

DriverKit驱动程序中可能存在IOBufferMemoyDescriptor泄漏

IFrame内容拒绝仅在iOS浏览器上加载-即使发布了内容-安全-策略(CSP)框架-祖先指令

检测touch 并忽略其他手势SWIFT SceneKit

如何在iOS 17 SwiftUI中获取用户名

长按 SwiftUI 更改项目的顺序

Swift Combine:prepend() before share() 阻止初始接收器执行

React Native IOS base64 编码图像不显示

卡在 Apple 的 SwiftUI 教程第 5 章(更新应用数据)

SwiftUI 切换语句

swiftUI中的剪辑形状无法使用旋转效果

无法结合 UIImageView 旋转动画和 tableView 部分重新加载

使用swift将图像转换为A4大小的pdf

所有小部件的Flutter 填充?

iOS中的apk类似功能是什么?

使用 swift 从应用程序委托打开视图控制器

在 Objective-C 中将所有文本转换为小写

什么是强属性属性