SwiftUI WidgetKit文本和图像对齐
我正在尝试用两个文本标签和一个图像创建一个小部件扩展。这两个标签需要位于左上角,图像需要位于右下角。我一直无法使它正常工作 有没有一种正确的方法可以做到这一点,而不必使用我不需要的间隔符()或覆盖图像。对SwiftUI来说非常陌生。任何帮助或指点都将不胜感激SwiftUI WidgetKit文本和图像对齐,swiftui,widgetkit,Swiftui,Widgetkit,我正在尝试用两个文本标签和一个图像创建一个小部件扩展。这两个标签需要位于左上角,图像需要位于右下角。我一直无法使它正常工作 有没有一种正确的方法可以做到这一点,而不必使用我不需要的间隔符()或覆盖图像。对SwiftUI来说非常陌生。任何帮助或指点都将不胜感激 VStack (alignment: .leading){ Text("Title") .font(.headline) .f
VStack (alignment: .leading){
Text("Title")
.font(.headline)
.fontWeight(.regular)
.lineLimit(1)
Text("subtitle")
.font(.title3)
.fontWeight(.bold)
.lineLimit(1)
.allowsTightening(true)
HStack {
Spacer(minLength: 15)
Image("fish")
.resizable()
.frame(width: 120, height: 80)
}
}
.padding(.top)
.padding(.leading)
有很多方法可以构建这样的布局。您所拥有的功能几乎可以正常工作,您只需在文本和图像之间设置一个
间隔符
,即可将图像向下推:
VStack (alignment: .leading) {
Text("Title")
.font(.headline)
.fontWeight(.regular)
.lineLimit(1)
Text("subtitle")
.font(.title3)
.fontWeight(.bold)
.lineLimit(1)
.allowsTightening(true)
Spacer(minLength: 0) // <-- add spacer here
HStack {
Spacer(minLength: 15)
Image("fish")
.resizable()
.frame(width: 120, height: 80)
}
}
.padding(.top)
.padding(.leading)
或者,如果您想要固定大小的图像,并且希望文本在较小的屏幕上重叠,您可以使用如下ZStack
:
VStack(alignment: .leading) {
Text("Title")
.font(.headline)
.fontWeight(.regular)
Text("subtitle")
.font(.title3)
.fontWeight(.bold)
.allowsTightening(true)
Spacer(minLength: 0)
Image("fish")
.resizable()
.aspectRatio(3/2, contentMode: .fit)
}
.lineLimit(1)
.padding(.leading)
.padding(.top)
ZStack(alignment: .bottomTrailing) {
Image("fish")
.resizable()
.frame(width: 120, height: 80)
VStack (alignment: .leading) {
Text("Title")
.font(.headline)
.fontWeight(.regular)
Text("subtitle")
.font(.title3)
.fontWeight(.bold)
.allowsTightening(true)
}
.lineLimit(1)
.padding()
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
}
正如我所说,有很多方法可以解决这个问题 我想我已经设法让它工作了,并且尽可能地接近它。看起来比以前好多了。稍微满意,但现在正在工作
ZStack {
VStack (alignment: .leading){
Text("Title")
.font(.body)
.fontWeight(.bold)
.lineLimit(1)
.allowsTightening(true)
Text("subtitle")
.font(.title)
.fontWeight(.regular)
HStack(alignment: .bottom){
Spacer()
Image("fish")
.resizable()
.frame(width: 120, height: 80)
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .bottomTrailing)
.offset(x: 5, y: -10)
// padding for images with frame bigger than actual image
}
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .leading)
}
.padding(12)
}
.background(Color(UIColor.secondarySystemBackground))
非常感谢。我对swiftui非常陌生,天生就是目标c,所以我不确定是否只有一种正确的方法可以做到这一点。非常感谢这些伟大的代码示例!不客气!