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

时间:2019-06-17 02:26:47

标签: swift swiftui

我有一个简单的视图,其中包含一个VStack,一行文本包含一个列表标题(认为是标题),后跟一个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: $0)
      }
    }
  } 
}

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

当我在标题上方添加三个任意Text字段时,最上面的元素再次丢失,并且现在显示了标题,因为它们在堆栈的下方。 enter image description here

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

出什么问题了?

2 个答案:

答案 0 :(得分:0)

这是SwiftUI框架中的错误,已报告给Apple。重现此问题的最简单方法是从一个干净的基于SwiftUI的macOS项目开始。使用此主体修改提供的ContentView。

dangerouslySetInnerHTML

Xcode预览将正确显示,但是在Mac上运行新应用时,窗口标题栏后面缺少“ A”文本元素。我们知道它会被标题栏剪切,因为SwiftUI独自向Link添加了灰色背景,其中只有两行仍然可见。

目前的解决方法是在VStack前面添加一个<a>元素,以便对其进行裁剪,但允许显示其余的堆栈。

答案 1 :(得分:0)

从AppDelegate.swift中的窗口设置中删除.fullSizeContentView,如下所示:

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

现在,您的内容视图将显示全部!