为什么颜色修饰符顺序会影响 SwiftUI 中的视图大小?

Why does color modifier order affect View size in SwiftUI?

为什么 SwiftUI 以不同的方式呈现这两个按钮?

一次尝试一个(正文中只有 1 个按钮),其中一个为全屏黄色,另一个为正常尺寸按钮。

测试 1

Button("Smh...") {}
    .background(.yellow)
    .frame(maxWidth: .infinity, maxHeight: .infinity)

测试 2

Button("Smh...") {}
    .frame(maxWidth: .infinity, maxHeight: .infinity)
    .background(.yellow)

我能猜到如果链接的方法都修改了布局,为什么顺序可能很重要,但颜色如何导致这种情况并不明显。

原因在this文章中有很好的解释。 每当应用修改器时,都会创建一个新视图。你的情况:

测试 1:

  1. 您创建了一个按钮,其大小由标签决定
  2. 创建了一个黄色背景的新视图
  3. 已创建具有最大宽度和最大高度的新视图,但不再应用黄色背景,因此您会看到一个“正常”大小的按钮。

测试 2:

  1. 您创建了一个按钮,其大小由标签决定
  2. 已创建具有最大宽度和高度的新视图
  3. 然后应用背景颜色,因此新创建的全屏视图具有黄色背景

为了更好地理解我的意思,请在空荡荡的操场上试试这个:

  import Foundation
  import SwiftUI
  import PlaygroundSupport

  struct ContentView: View {
    var body: some View {
        HStack {
            Button("Smh...") {}
                .frame(width: 100, height: 100)
                .background(.yellow)
        
            Button("Smh...") {}
                .background(.yellow)
                .frame(width: 100, height: 100)
                .border(.green)
                
        }
      }
  }

  PlaygroundPage.current.setLiveView(ContentView())