Swift 使用NSTableView创建NSScrollView,而不在TableView上缺少nib约束

Swift 使用NSTableView创建NSScrollView,而不在TableView上缺少nib约束,swift,macos,cocoa,nsscrollview,snapkit,Swift,Macos,Cocoa,Nsscrollview,Snapkit,我试图构建一个NSScrollView,内容是NSTableView,但是我得到一个错误,说我缺少了表上的常量,我不确定我缺少了什么。我正在使用SnapKit进行布局,检测到错误消息缺少的约束。无法放置它,因为没有足够的约束来完全定义大小和原点 我的ViewController代码是: class MainViewController: NSViewController { let table: NSTableView = { let t = NSTableView(frame:

我试图构建一个NSScrollView,内容是NSTableView,但是我得到一个错误,说我缺少了表上的常量,我不确定我缺少了什么。我正在使用SnapKit进行布局,检测到错误消息缺少的约束。无法放置它,因为没有足够的约束来完全定义大小和原点

我的ViewController代码是:

class MainViewController: NSViewController {

  let table: NSTableView = {
    let t = NSTableView(frame: .zero)
    t.headerView?.isHidden = false
    t.selectionHighlightStyle = .regular
    t.translatesAutoresizingMaskIntoConstraints = false
    t.autoresizingMask = [.height, .width]
    t.usesAlternatingRowBackgroundColors = true
    let col1 = NSTableColumn(identifier: NSUserInterfaceItemIdentifier("Name"))
    col1.headerCell = NSTableHeaderCell(textCell: "Name")
    t.addTableColumn(col1)
    return t
  }()

  required init() {
    super.init(nibName: nil, bundle: nil)
  }

  required init?(coder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
  }

  override func loadView() {
    view = NSView(frame: .zero)

    let scrollView = NSScrollView(frame: .zero)
    scrollView.hasVerticalScroller = true
    scrollView.autohidesScrollers = false
    scrollView.documentView = table

    view.addSubview(scrollView)

    /// Layout
    scrollView.snp.makeConstraints { make in
      make.edges.equalToSuperview().inset(Padding.large)
    }
  }

大多数在线指南都是面向使用Nib的,但我正试图通过编程来实现。有人知道是怎么做的吗?我m使用XCode 9.2和Swift 4。谢谢。

我猜您忘了为tableView本身添加约束,来描述它应该如何在封闭的滚动视图中布局

可以在检测到的\u缺少\u约束上设置符号断点。这显示了如何设置符号断点,以防您从未遇到它们


它应该能让我们更深入地了解到底是什么错了。约束是一项棘手的工作,如果看不到完整的情况,可能很难推理

我只是让表视图使用自动调整大小掩码自动设置的约束,从而消除了错误。SnapKit会自动将行translatesAutoResizezingMaskintoConstraints=false设置为true,因此将其设置为true似乎有效

let table: NSTableView = {
  let t = NSTableView(frame: .zero)
  t.headerView?.isHidden = false
  t.selectionHighlightStyle = .regular
  t.translatesAutoresizingMaskIntoConstraints = true
  t.usesAlternatingRowBackgroundColors = true
  let col1 = NSTableColumn(identifier: NSUserInterfaceItemIdentifier("Name"))
  col1.headerCell = NSTableHeaderCell(textCell: "Name")
  t.addTableColumn(col1)
  return t
}()

谢谢你。我想知道如何设置符号断点。但是,我仍然停留在如何添加tableView约束上。我已尝试将边缘捕捉到scrollView.content.Edge,但没有成功。。。滚动视图变为零大小,我无法在窗口中调整其大小。我尝试的代码是:table.snp.makeConstraints{make.edges.equalToscrollView.contentView.snp.edges中的make}