问题描述
我是 SwiftUI 的新手,第一次学习它,不明白为什么下面的代码段不起作用。理想情况下,vstack 应该向各个方向拉伸,图像 的宽度应该为 200 像素,而不会丢失其纵横比。
代码
struct ContentView: View {
var body: some View {
vstack() {
Image("Image Name")
.resizable()
.frame(width: 200)
.aspectRatio(contentMode: .fit)
}
.background(Color.red)
.frame(maxWidth: .infinity,maxHeight: .infinity)
}
}
在我不小心对修饰符重新排序之后,它起作用了。那么,我应该如何在没有每次点击和试用方法的情况下知道修改器的正确顺序?
// new vstack modifier order
.frame(maxWidth: .infinity,maxHeight: .infinity)
.background(Color.red)
// new Image modifier order
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 200)
解决方法
现在考虑它的最佳方式是想象 SwiftUI 在每个修改器之后呈现您的视图。所以,只要你说 .background(Color.red) ,它就会把背景涂成红色,不管你给它什么框架。如果您稍后扩展框架,它不会神奇地重绘背景 - 已经应用了。
当然,这实际上并不是 SwiftUI 的工作方式,因为如果这样做了,那将是一场性能噩梦,但它是您在学习时使用的一种巧妙的心理捷径。