我有一张图片,我只想拉伸它的高度以适合不同的内容,我该如何在swiftUI中做到这一点?现在看起来像这样
struct ContentView: View {
var body: some View {
VStack {
HStack {
VStack(alignment: .leading, spacing: 130) {
Text("Title")
.font(.headline)
.foregroundColor(.primary)
Text("text")
.font(.subheadline)
.foregroundColor(.secondary)
Text("padding")
}
.padding(.vertical)
Spacer()
Image("rightTag")
.resizable(capInsets: .init(top: 0, leading: 0, bottom: 0, trailing: 0), resizingMode: .stretch)
.aspectRatio(contentMode: .fit)
.frame(maxWidth: 20)
}
.frame(maxWidth: screen.width - 60)
.padding(.leading)
.background(.white)
.cornerRadius(20)
}
}
}
我如何拉伸其高度以适合此外框?可调整大小,无法完成。 任何帮助都会很棒!谢谢! 对不起,我没有让自己更清楚。
答案 0 :(得分:0)
这是可行的方法。但是,正如我现在看到的,您宁愿不拉伸整个原始图像,而只拉伸其中一个,所以在实际项目中,需要将图像分成三部分,并在拉伸方法以下仅应用于中间(正方形)部分。
方法使用异步状态更新,因此可以在实时预览/模拟器/ RealDevice中使用。 (已通过Xcode 11.2 / iOS 13.2测试)
struct ContentView: View {
@State private var textHeigh: CGFloat = .zero
var body: some View {
VStack {
HStack(alignment: .top) {
VStack(alignment: .leading, spacing: 130) {
Text("Title")
.font(.headline)
.foregroundColor(.primary)
Text("text")
.font(.subheadline)
.foregroundColor(.secondary)
Text("padding")
}
.padding(.vertical)
.alignmentGuide(.top, computeValue: { d in
DispatchQueue.main.async {
self.textHeigh = d.height // !! detectable height of left side text
}
return d[.top]
})
Spacer()
Image("rightTag")
.resizable()
.frame(maxWidth: 20, maxHeight: max(60, textHeigh)) // 60 just for default
}
.frame(maxWidth: screen.width - 60)
.padding(.leading)
.background(Color.white)
}
}
}