SwiftUI:如何知道修饰符的正确顺序?

Vin*_*rma 5 xcode ios swift swiftui vstack

我对SwiftUI很陌生,第一次学习它,无法理解为什么下面的代码片段不起作用。理想情况下,VStack应向各个方向延伸,并且Image的宽度应为 200 像素,而不会丢失其纵横比。

\n

代码

\n
struct ContentView: View {\n    var body: some View {\n        VStack() {\n            Image("Image Name")\n                .resizable()\n                .frame(width: 200)\n                .aspectRatio(contentMode: .fit)\n        }\n        .background(Color.red)\n        .frame(maxWidth: .infinity,maxHeight: .infinity)\n    }\n}\n\n
Run Code Online (Sandbox Code Playgroud)\n

在我不小心重新排序了修改器之后后,它起作用了。那么,如果每次都没有点击和尝试方法,我该如何知道修饰符的正确顺序呢?

\n
// new VStack modifier order \n.frame(maxWidth: .infinity, maxHeight: .infinity)\n.background(Color.red)\n\n// new Image modifier order\n.resizable()\n.aspectRatio(contentMode: .fit)\n.frame(width: 200)\n
Run Code Online (Sandbox Code Playgroud)\n

小智 9

目前考虑的最好方法是想象 SwiftUI 在每次修改后都会渲染您的视图。因此,只要您说\xc2\xa0 .background(Color.red)\xc2\xa0,无论您给它什么框架,它都会将背景着色为红色。如果您稍后扩展框架,它不会\xe2\x80\x99t 神奇地重绘已应用的背景\xe2\x80\x93\xc2\xa0。

\n

当然,这\xe2\x80\x99t\xc2\xa0实际上\xc2\xa0 SwiftUI是如何工作的,因为如果它这样做的话,这将是一场性能噩梦,但它\xe2\x80\x99是一个简洁的心理快捷方式,当你\ xe2\x80\x99正在学习。

\n

请参阅此链接了解更多详细信息。

\n