【问题标题】:SwiftUI how to align the view‘s leading to the most super view’s leading?SwiftUI 如何将视图的前导对齐到最超级视图的前导?
【发布时间】:2025-12-12 16:25:05
【问题描述】:

我是 SwiftUI 的新手,我正在制作一个小部件。默认代码包括一个文本视图,它在超级视图中以 x 为中心和以 y 为中心(我不知道 SwiftUI 中是否有相同的概念)。 这是我的代码:

struct WidgetEntryView : View {
    var entry: Provider.Entry

    var body: some View {
        VStack(alignment: .leading){
            Text(Date(), style: .time)
                .padding(.leading)
        }
    }
}

我想将视图的前导与超级视图的前导对齐,而不是将文本定位在中心。所以我试图在文本的前导添加一个填充,奇怪的是,似乎文本视图不是超级视图的直接子视图,而是定位在一个不可见的中心视图中,因为我最终得到了一个稍微有点偏离中心,如下所示:

这就是我想要的:

我尝试了位置方法,它是唯一有效的方法,但并不完美,因为它基于中心点。

我正在寻找更好的解决方案。

【问题讨论】:

  • 你能发布你目前拥有的代码吗?
  • 欢迎来到 SO - 请使用 tour 并阅读 How to Ask 以改进、编辑和格式化您的问题。如果没有Minimal Reproducible Example,就无法帮助您解决问题。

标签: ios swift xcode swiftui widget


【解决方案1】:

这是一个 Playground,它提供了一个看起来像您的图片的视图示例:

import UIKit
import SwiftUI
import PlaygroundSupport

struct ViewWithText : View {
    var body : some View {
        HStack {
            Text("Here")
            .background(Color.yellow)
        }
        .frame(width: 320, height: 480, alignment: .leading)
        .background(Color.gray)
    }
}

let hostingController = UIHostingController(rootView: ViewWithText())
PlaygroundSupport.PlaygroundPage.current.liveView = hostingController

【讨论】: