繁体   English   中英

SwiftUI 如何将view的leading对齐到最super view的leading?

[英]SwiftUI how to align the view‘s leading to the most super view’s leading?

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

struct WidgetEntryView : View {
    var entry: Provider.Entry

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

我想将视图的前导与超级视图的前导对齐,而不是将文本定位在中心。 所以我试图在文本的前导中添加一个填充,奇怪的是,文本视图似乎不是超级视图的直接子视图,而是位于一个不可见的居中视图中,因为我最终得到的文本视图略微偏离中心,看起来像这样:

在此处输入图像描述

这就是我要的:

在此处输入图像描述

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

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

这是一个 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

使用简单的填充和背景,您可以看到为什么它不适合您。

VStack(alignment: .leading){
    Text(Date(), style: .time)
        .padding(.leading)
        .background(.yellow)
}
.padding()
.background(Color.gray)

VStack的基本大小与其子项的大小相同。 解决方案是增加VStack的大小或Text的大小

在小部件中,我建议将父(V)Stack的大小 ( maxWidth ) 设置为尽可能大 ( .infinity ):


VStack(alignment: .leading){
    Text(Date(), style: .time)
}
.frame(maxWidth: .infinity, alignment: .leading)
.padding()

顺便说一下,设置padding(.leading)会导致“稍微偏离中心的文本视图”,因为这会向文本的左侧大小添加一个基本填充。 它只是增加了文本的宽度,但仍未完全达到可用宽度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM