运行 在目标上时 VStack 中缺少顶部元素

Missing top element in VStack when run on target

我有一个简单的视图,其中包含一个 VStack,一行文本包含列表的标题(想想 header),然后是一个 List

struct CampaignView : View {
  let campaign: Campaign

  init(from campaign: Campaign) {
    self.campaign = campaign
  }

  var body: some View {
    VStack {
      ObservationRow.titles
        .padding([.top, .leading], 8)
      List(campaign.observations) {
        ObservationRow(from: [=11=])
      }
    }
  } 
}

在模拟器上,一切看起来都不错,但是当我 运行 在我的目标 (macOS) 上运行时,我的标题行丢失了。注意:预览和目标应用程序的内容不同。这是缺少的顶线。

当我在标题上方添加三个任意文本字段时,最上面的元素再次丢失,现在显示标题,因为它们位于堆栈的更下方。

var body: some View {
    VStack {
      Text("A")
      Text("B")
      Text("C")
      ObservationRow.titles
        .padding([.top, .leading], 8)
      List(campaign.observations) {
        ObservationRow(from: [=12=])
      }
    }
  }

有什么问题?

这是 SwiftUI 框架中的错误,已报告给 Apple。重现此问题的最简单方法是从一个干净的、基于 SwiftUI 的 macOS 项目开始。用这个 body.

修改提供的 ContentView
var body: some View {
  VStack {
    Text("A")
    List(1...4) {
      Text("\([=10=])")
    }
  }
}

Xcode 预览会正确显示,但是当新应用 运行 在 Mac 上时,"A" 文本元素在标题栏后面丢失window。我们知道它被标题栏剪裁了,因为 SwiftUI 添加(自己)灰色背景到 Text("A") 其中只有几行仍然可见。

目前的解决方法是简单地将 Text(" ") 元素添加到 VStack 中,这样它就会被剪裁,但允许显示堆栈的其余部分。

从 AppDelegate.swift 中的 window 设置中删除 .fullSizeContentView,使其看起来像这样:

window = NSWindow(
    contentRect: NSRect(x: 0, y: 0, width: 480, height: 300),
    styleMask: [.titled, .closable, .miniaturizable, .resizable],
    backing: .buffered, defer: false)

现在您的内容视图将显示所有内容!