![](/img/trans.png)
[英]How do I create a leading border for a view with cornerRadius in SwiftUI?
[英]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.